from pydantic import BaseModel
from decimal import Decimal
from datetime import datetime
from typing import Optional, List

class AccountingPeriod(BaseModel):
    """Model pentru perioada contabilă"""
    an: Optional[int] = None
    luna: Optional[int] = None

class BankCashRegister(BaseModel):
    """Model pentru Registrul de Casă și Bancă"""
    nume: str
    nract: Optional[int] = None
    dataact: Optional[datetime] = None
    nume_cont_bancar: str    # din vbalanta_parteneri.nume
    incasari: Decimal
    plati: Decimal
    sold: Decimal
    valuta: Optional[str] = None
    tip_registru: str  # "BANCA LEI", "CASA VALUTA" etc
    explicatia: str

class RegisterFilter(BaseModel):
    """Filtre pentru registrul de casă și bancă"""
    company: str
    register_type: Optional[str] = None  # BANCA_LEI, BANCA_VALUTA, CASA_LEI, CASA_VALUTA sau None pentru toate
    luna: Optional[int] = None  # Luna contabilă (1-12) pentru PACK_SESIUNE
    an: Optional[int] = None  # Anul contabil pentru PACK_SESIUNE
    date_from: Optional[datetime] = None
    date_to: Optional[datetime] = None
    partner_name: Optional[str] = None
    bank_account: Optional[str] = None  # Filter for specific bank/cash account (bancasa)
    page: int = 1
    page_size: int = 50

class RegisterListResponse(BaseModel):
    """Răspuns pentru lista din registru"""
    registers: List[BankCashRegister]
    total_count: int
    filtered_count: int
    total_incasari: Decimal
    total_plati: Decimal
    page: int
    page_size: int
    has_more: bool
    accounting_period: Optional[AccountingPeriod] = None
    # Totaluri din TOATE înregistrările filtrate (nu doar pagina curentă)
    sold_precedent_all: Decimal = Decimal('0.00')
    total_incasari_all: Decimal = Decimal('0.00')
    total_plati_all: Decimal = Decimal('0.00')
    sold_final_all: Decimal = Decimal('0.00')