from uuid import UUID

from pydantic import BaseModel, ConfigDict, EmailStr, Field, field_validator

from app.core.permissions import Role


class StaffUserResponse(BaseModel):
    id: UUID
    full_name: str
    email: EmailStr
    model_config = ConfigDict(from_attributes=True)


class StaffResponse(BaseModel):
    id: UUID
    business_id: UUID
    user_id: UUID
    role: str
    all_branches: bool
    is_active: bool
    user: StaffUserResponse


class StaffCreate(BaseModel):
    email: EmailStr
    role: Role = Role.CASHIER
    all_branches: bool = False
    branch_ids: list[UUID] = Field(default_factory=list)


class StaffRoleUpdate(BaseModel):
    role: Role


class StaffStatusUpdate(BaseModel):
    is_active: bool


class StaffBranchesUpdate(BaseModel):
    all_branches: bool = False
    branch_ids: list[UUID] = Field(default_factory=list)

    @field_validator("branch_ids")
    @classmethod
    def unique_branches(cls, value: list[UUID]) -> list[UUID]:
        if len(value) != len(set(value)):
            raise ValueError("Branch IDs must not contain duplicates.")
        return value
