"""End-to-end tests for authentication flows."""
import pytest
from playwright.sync_api import Page, expect


def test_user_registration(page: Page, base_url: str):
    """Test complete user registration flow."""
    page.goto(f"{base_url}/register")
    
    # Fill registration form
    page.fill('input[name="username"]', 'testuser')
    page.fill('input[name="email"]', 'test@example.com')
    page.fill('input[name="password"]', 'SecurePass123!')
    page.fill('input[name="confirmPassword"]', 'SecurePass123!')
    
    # Submit form
    page.click('button[type="submit"]')
    
    # Should show success message or redirect to email verification
    expect(page.locator('text=verify')).to_be_visible(timeout=5000)


def test_user_login(page: Page, base_url: str):
    """Test user login flow."""
    page.goto(f"{base_url}/login")
    
    # Fill login form
    page.fill('input[name="username"]', 'testuser')
    page.fill('input[name="password"]', 'SecurePass123!')
    
    # Submit
    page.click('button[type="submit"]')
    
    # Should redirect to dashboard
    expect(page).to_have_url(f"{base_url}/dashboard", timeout=5000)


def test_password_reset_flow(page: Page, base_url: str):
    """Test forgot password flow."""
    page.goto(f"{base_url}/forgot-password")
    
    # Enter email
    page.fill('input[type="email"]', 'test@example.com')
    page.click('button[type="submit"]')
    
    # Should show success message
    expect(page.locator('text=Check Your Email')).to_be_visible(timeout=5000)


def test_logout(page: Page, base_url: str):
    """Test logout functionality."""
    # First login
    test_user_login(page, base_url)
    
    # Click logout
    page.click('button:has-text("Logout")')
    
    # Should redirect to login
    expect(page).to_have_url(f"{base_url}/login", timeout=5000)


def test_protected_route_redirect(page: Page, base_url: str):
    """Test that protected routes redirect to login."""
    page.goto(f"{base_url}/dashboard")
    
    # Should redirect to login
    expect(page).to_have_url(f"{base_url}/login", timeout=5000)
