
import { test, expect } from '@playwright/test';

test.describe('Authentication', () => {
    const uniqueId = Date.now();
    const candidateUser = {
        name: `Test Candidate ${uniqueId}`,
        username: `candidate_${uniqueId}`,
        email: `candidate_${uniqueId}@example.com`,
        password: 'password123',
        phone: '11999999999',
        birthDate: '1990-01-01',
    };

    test('should register a new candidate', async ({ page }) => {
        await page.goto('/register/candidate');

        // Step 1: Personal Info
        await page.fill('input[name="fullName"]', candidateUser.name);
        await page.fill('input[name="username"]', candidateUser.username);
        await page.fill('input[name="email"]', candidateUser.email);
        await page.fill('input[name="password"]', candidateUser.password);
        await page.fill('input[name="confirmPassword"]', candidateUser.password);
        await page.fill('input[name="birthDate"]', candidateUser.birthDate);
        await page.click('button:has-text("Next Step")'); // register.candidate.actions.next

        // Step 2: Address/Contact
        await page.fill('input[name="phone"]', candidateUser.phone);
        await page.fill('input[name="address"]', "Test Street 123");
        await page.fill('input[name="city"]', "Test City");
        // State is a select, might need click logic
        await page.click('button[role="combobox"]'); // Select trigger
        await page.click('div[role="option"] >> text="São Paulo"'); // Select option
        await page.fill('input[name="zipCode"]', "12345-678");
        await page.click('button:has-text("Next Step")'); // register.candidate.actions.next

        // Step 3: Professional (skip details, checking optional or required)
        // Assume basics are required or select mock
        // Just click submit to see if validation passes/fails 
        // Need to fill required if any. 
        // Education: Select
        await page.click('button[role="combobox"] >> nth=0'); // First select in this step (Education)
        await page.click('div[role="option"] >> text="College"'); // register.candidate.education.college

        // Experience: Select
        await page.click('button[role="combobox"] >> nth=1'); // Second select (Experience)
        // Note: Experience select might be difficult to target by nth if previous selects are still present but hidden?
        // Actually, step 1 and 2 are hidden (removed from DOM or display:none?).
        // Framer motion uses AnimatePresence, usually removes from DOM after exit.
        // So nth=0 and nth=1 might be correct for valid visible selects.
        await page.click('div[role="option"] >> text="1 to 2 years"'); // register.candidate.experience.oneToTwo

        // Terms
        await page.click('button[role="checkbox"][id="acceptTerms"]');

        await page.click('button:has-text("Create Account")'); // register.candidate.actions.submit

        // Expect redirect to login
        await expect(page).toHaveURL(/\/login/);
        await expect(page.getByText('Account created successfully')).toBeVisible();
    });

    test('should login with registered candidate', async ({ page }) => {
        await page.goto('/login');
        await page.fill('input[name="email"]', candidateUser.email);
        await page.fill('input[name="password"]', candidateUser.password);
        await page.click('button:has-text("Sign in")'); // auth.login.submit

        // Expect dashboard
        await expect(page).toHaveURL(/\/dashboard/); // dashboard/candidate or just dashboard depending on redirect
    });
});
