from pydantic import BaseModel, Field
from typing import Optional, List
from datetime import datetime
from uuid import UUID


class UserRoleUpdate(BaseModel):
    role: str


class UserListResponse(BaseModel):
    id: UUID
    username: str
    email: str
    role_id: Optional[UUID] = None
    role_name: Optional[str] = None
    is_active: bool
    created_at: datetime
    is_twitch_linked: bool

    class Config:
        from_attributes = True

    @classmethod
    def from_orm_with_role(cls, user):
        """Create UserListResponse with role_name from role relationship."""
        role_name = user.role.name if user.role else None
        return cls(
            id=user.id,
            username=user.username,
            email=user.email,
            role_id=user.role_id,
            role_name=role_name,
            is_active=user.is_active,
            created_at=user.created_at,
            is_twitch_linked=user.is_twitch_linked,
        )


class SystemStats(BaseModel):
    total_users: int
    total_streams: int
    total_comments: int
    active_users: int
    users_by_role: dict[str, int]
