import { test, expect } from '@playwright/test';
import { BASE_URL, SUPER_ADMIN, loginAs } from '../helpers';

test.describe('WFBO Advanced Settings — Auto HWR', () => {

    // The advanced-settings route requires ROLE_SUPER_ADMIN, not ROLE_ADMIN.
    test.beforeEach(async ({ page }) => {
        await loginAs(page, SUPER_ADMIN.mobile, SUPER_ADMIN.password);
    });

    test('advanced settings page loads with auto HWR section', async ({ page }) => {
        await page.goto(`${BASE_URL}/wfbo/advanced-settings`);
        await expect(page.locator('[data-testid="input-auto-hwr-enabled-wrapper"]')).toBeVisible();
    });

    test('auto HWR toggle is present and clickable', async ({ page }) => {
        await page.goto(`${BASE_URL}/wfbo/advanced-settings`);
        const toggle = page.locator('[data-testid="input-auto-hwr-enabled"]');
        await expect(toggle).toBeVisible();
    });

    test('auto HWR daily quota input is visible', async ({ page }) => {
        await page.goto(`${BASE_URL}/wfbo/advanced-settings`);
        await expect(page.locator('[data-testid="input-auto-hwr-daily-quota"]')).toBeVisible();
    });

    test('auto HWR min/max rate inputs are visible', async ({ page }) => {
        await page.goto(`${BASE_URL}/wfbo/advanced-settings`);
        await expect(page.locator('[data-testid="input-auto-hwr-min-rate"]')).toBeVisible();
        await expect(page.locator('[data-testid="input-auto-hwr-max-rate"]')).toBeVisible();
    });

    test('auto HWR adjustment step and churn floor inputs are visible', async ({ page }) => {
        await page.goto(`${BASE_URL}/wfbo/advanced-settings`);
        await expect(page.locator('[data-testid="input-auto-hwr-adjustment-step"]')).toBeVisible();
        await expect(page.locator('[data-testid="input-auto-hwr-churn-floor"]')).toBeVisible();
    });

    test('auto HWR status section is visible when enabled', async ({ page }) => {
        await page.goto(`${BASE_URL}/wfbo/advanced-settings`);
        await expect(page.locator('[data-testid="advanced-settings-form"]')).toBeVisible();
    });

    test('submitting advanced settings with auto HWR unchanged shows flash-success', async ({ page }) => {
        await page.goto(`${BASE_URL}/wfbo/advanced-settings`);
        await page.click('[data-testid="btn-save-advanced-settings"]');
        await expect(page.locator('[data-testid="flash-success"]')).toBeVisible();
    });

    test('enabling auto HWR and saving persists the toggle', async ({ page }) => {
        await page.goto(`${BASE_URL}/wfbo/advanced-settings`);

        const toggle = page.locator('[data-testid="input-auto-hwr-enabled"]');
        const isChecked = await toggle.isChecked();

        // Toggle to the opposite state
        await toggle.click({ force: true });
        await page.click('[data-testid="btn-save-advanced-settings"]');
        await expect(page.locator('[data-testid="flash-success"]')).toBeVisible();

        await page.reload();
        const savedToggle = page.locator('[data-testid="input-auto-hwr-enabled"]');
        expect(await savedToggle.isChecked()).toBe(!isChecked);

        // Restore original state
        await savedToggle.click({ force: true });
        await page.click('[data-testid="btn-save-advanced-settings"]');
        await expect(page.locator('[data-testid="flash-success"]')).toBeVisible();
    });

    test('today\'s revenue status section renders with badge and revenue figure', async ({ page }) => {
        await page.goto(`${BASE_URL}/wfbo/advanced-settings`);

        const statusSection = page.locator('[data-testid="auto-hwr-status"]');
        await expect(statusSection).toBeVisible();

        const badge = page.locator('[data-testid="auto-hwr-status-badge"]');
        await expect(badge).toBeVisible();
        await expect(badge).toHaveText(/Ahead|Behind|On Track/);

        await expect(page.locator('[data-testid="auto-hwr-revenue"]')).toBeVisible();
    });

    test('changing daily quota persists after save', async ({ page }) => {
        await page.goto(`${BASE_URL}/wfbo/advanced-settings`);

        const quotaInput = page.locator('[data-testid="input-auto-hwr-daily-quota"]');
        const original = await quotaInput.inputValue();

        await quotaInput.fill('5000');
        await page.click('[data-testid="btn-save-advanced-settings"]');
        await expect(page.locator('[data-testid="flash-success"]')).toBeVisible();

        await page.reload();
        const savedValue = await page.locator('[data-testid="input-auto-hwr-daily-quota"]').inputValue();
        expect(parseFloat(savedValue)).toBeCloseTo(5000, 0);

        // Restore
        await page.locator('[data-testid="input-auto-hwr-daily-quota"]').fill(original);
        await page.click('[data-testid="btn-save-advanced-settings"]');
        await expect(page.locator('[data-testid="flash-success"]')).toBeVisible();
    });
});
