"""
Department schemas for API requests and responses.
"""
from typing import Optional
from pydantic import BaseModel, Field
from datetime import datetime

from app.models.department import DepartmentCategory


# Department Schemas

class DepartmentBase(BaseModel):
    """Base department schema."""
    code: str = Field(..., min_length=1, max_length=20, description="Unique department code")
    name: str = Field(..., min_length=1, max_length=100, description="Department name in French")
    name_en: Optional[str] = Field(None, max_length=100, description="Department name in English")
    category: DepartmentCategory = Field(..., description="Department category for reporting")
    is_revenue: bool = Field(True, description="Whether this department generates revenue")
    is_active: bool = Field(True, description="Whether this department is active")


class DepartmentCreate(DepartmentBase):
    """Schema for creating a department."""
    pass


class DepartmentUpdate(BaseModel):
    """Schema for updating a department."""
    name: Optional[str] = Field(None, min_length=1, max_length=100)
    name_en: Optional[str] = Field(None, max_length=100)
    category: Optional[DepartmentCategory] = None
    is_revenue: Optional[bool] = None
    is_active: Optional[bool] = None


class DepartmentResponse(DepartmentBase):
    """Schema for department response."""
    id: int
    created_at: datetime
    updated_at: datetime

    class Config:
        from_attributes = True


class DepartmentListResponse(BaseModel):
    """Schema for department list with statistics."""
    departments: list[DepartmentResponse]
    total: int
    active_count: int
    revenue_departments: int
    expense_departments: int
