from __future__ import annotations

from decimal import Decimal

from pydantic import Field

from app.schemas.common import ORMModel


class BudgetHeadCreate(ORMModel):
    financial_year: str = Field(pattern=r"^\d{4}-\d{2}$")
    expenditure_group: str = Field(pattern=r"^(Administrative|Programme)$")
    head_code: str = Field(min_length=1, max_length=40)
    head_name: str = Field(min_length=1, max_length=180)
    allocation_amount: Decimal = Field(default=Decimal("0"), ge=0)
    remarks: str | None = None


class BudgetHeadUpdate(ORMModel):
    expenditure_group: str | None = Field(default=None, pattern=r"^(Administrative|Programme)$")
    head_code: str | None = Field(default=None, min_length=1, max_length=40)
    head_name: str | None = Field(default=None, min_length=1, max_length=180)
    allocation_amount: Decimal | None = Field(default=None, ge=0)
    remarks: str | None = None
    is_active: bool | None = None


class ExpenditureHeadCreate(ORMModel):
    budget_head_id: int = Field(gt=0)
    head_code: str = Field(min_length=1, max_length=40)
    head_name: str = Field(min_length=1, max_length=180)
    remarks: str | None = None


class ExpenditureHeadUpdate(ORMModel):
    budget_head_id: int | None = Field(default=None, gt=0)
    head_code: str | None = Field(default=None, min_length=1, max_length=40)
    head_name: str | None = Field(default=None, min_length=1, max_length=180)
    remarks: str | None = None
    is_active: bool | None = None
