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


class ContractCreate(BaseModel):
    title: str
    company_id: Optional[int] = None
    vendor_id: Optional[int] = None
    predecessor_ids: list[int] = []
    period_start: Optional[date] = None
    period_end: Optional[date] = None
    body: Optional[str] = None


class ContractUpdate(BaseModel):
    title: Optional[str] = None
    company_id: Optional[int] = None
    vendor_id: Optional[int] = None
    predecessor_ids: Optional[list[int]] = None   # None = don't touch; [] = remove all
    period_start: Optional[date] = None
    period_end: Optional[date] = None
    body: Optional[str] = None


class ContractOut(BaseModel):
    id: int
    title: str
    company_id: Optional[int]
    vendor_id: Optional[int]
    company_name: Optional[str] = None
    vendor_name: Optional[str] = None
    predecessors: list[dict] = []   # [{id, title}, ...]
    successors: list[dict] = []     # [{id, title}, ...]
    period_start: Optional[date]
    period_end: Optional[date]
    body: Optional[str]
    file_path: Optional[str]
    bukti_transfer_path: Optional[str]
    created_by: Optional[int]
    created_at: datetime
    updated_at: datetime
    model_config = {"from_attributes": True}
