from pydantic import BaseModel
from datetime import datetime, date
from typing import Optional


class LoanCreate(BaseModel):
    loan_date: date
    total_amount: int
    monthly_deduction: int
    description: Optional[str] = None


class LoanUpdate(BaseModel):
    monthly_deduction: Optional[int] = None
    description: Optional[str] = None
    status: Optional[str] = None


class LoanOut(BaseModel):
    id: str
    employee_id: str
    loan_date: date
    total_amount: int
    monthly_deduction: int
    description: Optional[str] = None
    remaining_balance: int
    status: str
    created_at: datetime

    model_config = {"from_attributes": True}


class LoanTransactionCreate(BaseModel):
    transaction_date: date
    description: str
    debit: int = 0
    credit: int = 0


class LoanTransactionOut(BaseModel):
    id: str
    loan_id: str
    employee_id: str
    transaction_date: date
    description: str
    debit: int
    credit: int
    balance: int
    created_at: datetime

    model_config = {"from_attributes": True}


class CombinedLedgerRow(BaseModel):
    id: str
    loan_id: str
    loan_description: Optional[str] = None
    transaction_date: date
    description: str
    debit: int
    credit: int
    combined_balance: int
    created_at: datetime
