"""
DTOs para gestión de relaciones usuario-tenant
"""

from datetime import datetime
from typing import Optional

from pydantic import BaseModel, Field


class AddUserToTenantRequestDTO(BaseModel):
    """Request para agregar un usuario a un tenant"""

    keycloak_user_id: str = Field(..., description="ID del usuario en Keycloak")
    tenant_id: int = Field(..., description="ID del tenant")
    role: Optional[str] = Field(None, description="Rol del usuario en el tenant")


class RemoveUserFromTenantRequestDTO(BaseModel):
    """Request para eliminar un usuario de un tenant"""

    keycloak_user_id: str = Field(..., description="ID del usuario en Keycloak")
    tenant_id: int = Field(..., description="ID del tenant")
    soft_delete: bool = Field(True, description="Si True, desactiva. Si False, elimina")


class UpdateUserRoleRequestDTO(BaseModel):
    """Request para actualizar el rol de un usuario en un tenant"""

    keycloak_user_id: str = Field(..., description="ID del usuario en Keycloak")
    tenant_id: int = Field(..., description="ID del tenant")
    role: str = Field(..., description="Nuevo rol del usuario")


class UserTenantResponseDTO(BaseModel):
    """Response con información de relación usuario-tenant"""

    id: int
    keycloak_user_id: str
    tenant_id: int
    is_active: bool
    role: Optional[str]
    created_at: datetime
    updated_at: datetime

    class Config:
        from_attributes = True


class TenantBasicInfoDTO(BaseModel):
    """Información básica de un tenant"""

    id: int
    name: str
    slug: str
    is_active: bool
    keycloak_realm: str

    class Config:
        from_attributes = True


class UserTenantsResponseDTO(BaseModel):
    """Response con los tenants de un usuario"""

    keycloak_user_id: str
    tenants: list[TenantBasicInfoDTO]
