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


class SalaryHistoryCreate(BaseModel):
    old_salary: Optional[int] = None
    new_salary: int
    effective_date: date
    notes: Optional[str] = None


class SalaryHistoryOut(BaseModel):
    id: str
    employee_id: str
    old_salary: Optional[int] = None
    new_salary: int
    effective_date: date
    notes: Optional[str] = None
    created_at: datetime

    model_config = {"from_attributes": True}


class SalaryRecommendation(BaseModel):
    employee_id: str
    name: str
    bank_name: Optional[str] = None
    account_number: str
    account_name: str
    last_salary_date: Optional[date] = None
    current_salary: int
    loan_deduction: int
    net_salary: int
    recommended_increase: int
    recommended_new_net: int
    recommended_pct: float
    method: str
    history_count: int = 0
    recent_history: List[SalaryHistoryOut] = []


class BulkIncreaseItem(BaseModel):
    employee_id: str
    new_base_salary: int
    effective_date: date
    notes: Optional[str] = None


class BulkIncreaseRequest(BaseModel):
    items: List[BulkIncreaseItem]
