from typing import Optional
from datetime import datetime
from uuid import UUID
from pydantic import BaseModel, model_validator


class UserResponse(BaseModel):
    id: UUID
    email: str
    first_name: str
    last_name: str
    name: str = ""
    role: str
    status: str
    tenant_id: Optional[UUID] = None
    avatar_url: Optional[str] = None
    last_login_at: Optional[datetime] = None
    invited_at: Optional[datetime] = None
    is_current_user: bool = False

    model_config = {"from_attributes": True}

    @model_validator(mode="after")
    def compute_name(self) -> "UserResponse":
        if not self.name:
            full = f"{self.first_name} {self.last_name}".strip()
            self.name = full or self.email
        return self


class TokenResponse(BaseModel):
    access_token: str
    refresh_token: str
    token_type: str = "bearer"
    user: UserResponse


class AccessTokenResponse(BaseModel):
    access_token: str
    token_type: str = "bearer"
