"""
Authentication DTOs

Data transfer objects for authentication flows.
"""

from dataclasses import dataclass, field
from datetime import datetime
from typing import Optional, List

from .base import BaseDTO


@dataclass
class LoginRequestDTO(BaseDTO):
    """Login request data."""

    email: str
    password: str
    remember_me: bool = False


@dataclass
class RegisterRequestDTO(BaseDTO):
    """Registration request data."""

    email: str
    password: str
    password_confirm: str
    first_name: str
    last_name: str
    phone: Optional[str] = None
    organization: Optional[str] = None


@dataclass
class TokenDTO(BaseDTO):
    """JWT token data."""

    access_token: str
    refresh_token: str
    token_type: str = "Bearer"
    expires_in: int = 3600  # seconds


@dataclass
class UserDTO(BaseDTO):
    """User profile data."""

    id: str
    email: str
    first_name: str
    last_name: str
    full_name: str = ""
    avatar: Optional[str] = None
    phone: Optional[str] = None
    is_active: bool = True
    is_verified: bool = False
    roles: List[str] = field(default_factory=list)
    permissions: List[str] = field(default_factory=list)
    tenant_id: Optional[str] = None
    created_at: Optional[datetime] = None
    updated_at: Optional[datetime] = None

    def __post_init__(self):
        if not self.full_name:
            self.full_name = f"{self.first_name} {self.last_name}".strip()


@dataclass
class LoginResponseDTO(BaseDTO):
    """Login response data."""

    user: UserDTO
    token: TokenDTO
    redirect_url: Optional[str] = None
