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

test.describe('WFBO Race Dividends', () => {

    test.beforeEach(async ({ page }) => {
        await loginAs(page, ADMIN.mobile, ADMIN.password);
    });

    test('race dividends page loads with title and table', async ({ page }) => {
        await page.goto(`${BASE_URL}/wfbo/race-dividends`);

        await expect(page.locator('[data-testid="wfbo-page-title"]')).toHaveText('Race Dividends');
        await expect(page.locator('[data-testid="race-dividends-table"]')).toBeVisible();
    });

    test('race dividends nav link is visible in sidebar', async ({ page }) => {
        await page.goto(`${BASE_URL}/wfbo/race-dividends`);

        await expect(page.locator('[data-testid="wfbo-nav-race-dividends"]')).toBeVisible();
    });

    test('table contains exactly 15 active inputs', async ({ page }) => {
        await page.goto(`${BASE_URL}/wfbo/race-dividends`);

        const inputs = page.locator('[data-testid^="race-dividend-"]');
        await expect(inputs).toHaveCount(15);
    });

    test('save button is present', async ({ page }) => {
        await page.goto(`${BASE_URL}/wfbo/race-dividends`);

        await expect(page.locator('[data-testid="btn-save-race-dividends"]')).toBeVisible();
    });

    test('can save valid dividend values and sees success flash', async ({ page }) => {
        await page.goto(`${BASE_URL}/wfbo/race-dividends`);

        await page.fill('[data-testid="race-dividend-1-6"]', '100.00');
        await page.fill('[data-testid="race-dividend-1-2"]', '50.00');
        await page.click('[data-testid="btn-save-race-dividends"]');

        await expect(page.locator('[data-testid="flash-success"]')).toBeVisible();
    });

    test('saved values persist after page reload', async ({ page }) => {
        await page.goto(`${BASE_URL}/wfbo/race-dividends`);

        await page.fill('[data-testid="race-dividend-2-3"]', '75.50');
        await page.click('[data-testid="btn-save-race-dividends"]');
        await expect(page.locator('[data-testid="flash-success"]')).toBeVisible();

        await page.goto(`${BASE_URL}/wfbo/race-dividends`);
        await expect(page.locator('[data-testid="race-dividend-2-3"]')).toHaveValue('75.50');
    });

    test('all 15 pairs accept and persist values', async ({ page }) => {
        await page.goto(`${BASE_URL}/wfbo/race-dividends`);

        // Fill a representative sample across the triangular matrix
        const pairs: [string, string][] = [
            ['race-dividend-1-6', '10.00'],
            ['race-dividend-1-2', '11.00'],
            ['race-dividend-3-5', '12.50'],
            ['race-dividend-5-6', '99.00'],
        ];

        for (const [testId, value] of pairs) {
            await page.fill(`[data-testid="${testId}"]`, value);
        }

        await page.click('[data-testid="btn-save-race-dividends"]');
        await expect(page.locator('[data-testid="flash-success"]')).toBeVisible();

        await page.goto(`${BASE_URL}/wfbo/race-dividends`);
        for (const [testId, value] of pairs) {
            await expect(page.locator(`[data-testid="${testId}"]`)).toHaveValue(value);
        }
    });

    test('non-admin cannot access race dividends page', async ({ page }) => {
        await loginAs(page, USER.mobile, USER.password);
        await page.goto(`${BASE_URL}/wfbo/race-dividends`);

        await expect(page.locator('[data-testid="wfbo-sidebar"]')).not.toBeVisible();
    });

});
