from datetime import datetime
from typing import Optional
from pydantic import BaseModel


# ── Document ──────────────────────────────────────────────────────────────────

class DocumentCreate(BaseModel):
    name: str
    doc_type: str           # bpkb | ktp | stnk | other
    location: str = "home"  # bank | home
    custodian_id: int

class DocumentUpdate(BaseModel):
    name: Optional[str] = None
    doc_type: Optional[str] = None
    location: Optional[str] = None
    status: Optional[str] = None
    custodian_id: Optional[int] = None

class DocumentOut(BaseModel):
    id: int
    name: str
    doc_type: str
    location: str
    status: str
    custodian_id: Optional[int]
    custodian_name: Optional[str] = None
    created_at: datetime
    updated_at: datetime

    class Config:
        from_attributes = True


# ── Borrow Request ────────────────────────────────────────────────────────────

class BorrowRequestCreate(BaseModel):
    purpose: str
    document_ids: list[int]

class BorrowRequestItemOut(BaseModel):
    id: int
    borrow_request_id: int
    document_id: int
    document_name: Optional[str] = None
    document_location: Optional[str] = None
    document_type: Optional[str] = None
    document_custodian_id: Optional[int] = None

    class Config:
        from_attributes = True

class BorrowRequestOut(BaseModel):
    id: int
    requester_id: int
    requester_name: Optional[str] = None
    purpose: str
    # active | handed_over | return_pending | completed
    status: str
    handover_handed_by: Optional[str] = None
    handover_recipient: Optional[str] = None
    handover_date: Optional[datetime] = None
    handover_photo_path: Optional[str] = None
    return_handed_by: Optional[str] = None
    return_recipient: Optional[str] = None
    return_photo_path: Optional[str] = None
    completed_at: Optional[datetime] = None
    created_at: datetime
    items: list[BorrowRequestItemOut] = []

    class Config:
        from_attributes = True
