from __future__ import annotations

from datetime import date

from pydantic import BaseModel, Field


class EquipmentCreateRequest(BaseModel):
    company_id: str
    equipment_code: str
    equipment_name: str
    equipment_type: str = "excavator"
    license_plate: str | None = None
    brand_model: str | None = None
    manufacture_year: int | None = None
    ownership_type: str = "owned"
    hourly_rate_standard: float = 0.0
    fuel_norm_per_hour: float = 0.0
    current_project_id: str | None = None
    current_operator_employee_id: str | None = None
    status: str = "available"
    notes: str | None = None


class EquipmentLogCreateRequest(BaseModel):
    equipment_id: str
    project_id: str
    operator_employee_id: str | None = None
    log_date: date
    shift_code: str = "day"
    hours_operated: float = 8.0
    fuel_consumed_liters: float = 0.0
    work_description: str | None = None
    meter_start: float = 0.0
    meter_end: float = 0.0
    ai_audit_flags: list[str] = Field(default_factory=list)


class FinancialTransactionCreateRequest(BaseModel):
    company_id: str
    project_id: str
    transaction_code: str
    transaction_type: str
    direction: str = "outflow"
    amount: float
    transaction_date: date
    beneficiary_or_payer: str | None = None
    invoice_number: str | None = None
    payment_method: str = "bank_transfer"
    dossier_reference_id: str | None = None
    accounting_status: str = "recorded"
    ai_risk_score: float = 0.0
    notes: str | None = None
    created_by_employee_id: str | None = None


class TimesheetRecordRequest(BaseModel):
    company_id: str
    employee_id: str
    project_id: str
    work_date: date
    shift_type: str = "standard"
    hours_worked: float = 8.0
    daily_wage_rate: float = 0.0
    labor_cost_allocated: float = 0.0
    attendance_status: str = "present"
    location_verified: bool = False
    notes: str | None = None


class DocumentCreateRequest(BaseModel):
    company_id: str | None = None
    project_id: str | None = None
    document_code: str | None = None
    document_title: str
    document_type: str = "CV"  # CV, TTr, QD, BB, TB, HD
    category: str = "outgoing"  # incoming, outgoing, internal, legal
    issuing_authority: str | None = "Công ty TNHH Xây Dựng Định Sơn"
    sign_date: date | None = None
    received_or_sent_date: date | None = None
    signer_name: str | None = None
    urgency_level: str = "normal"
    confidentiality: str = "normal"
    file_url: str | None = None
    summary_content: str | None = None
    status: str = "valid"
    ai_legal_references: list[str] = Field(default_factory=list)
    ai_risk_assessment: str | None = None
    is_inserted_number: bool = False
    insert_approval_status: str = "none"
    insert_requested_by: str | None = None
    insert_reason: str | None = None


class DocumentApproveRequest(BaseModel):
    approved: bool


class DocumentUpdateRequest(BaseModel):
    document_code: str | None = None
    document_title: str | None = None
    document_group: str | None = None
    document_type: str | None = None
    sign_date: date | None = None
    issuing_authority: str | None = None
    signer_name: str | None = None
    summary_content: str | None = None
    ai_risk_assessment: str | None = None
    ai_legal_references: list[str] | None = None
    signature_status: str | None = None
    document_direction: str | None = None
    partner_name: str | None = None
    partner_tax_code: str | None = None
    project_stage: str | None = None
    change_summary: str | None = None
    status: str | None = None
    verification_status: str | None = None


class SignatureStatusUpdateRequest(BaseModel):
    signature_status: (
        str  # draft, reviewed, signed_unsigned_seal, fully_executed, rejected_returned
    )


class UserRoleUpdateRequest(BaseModel):
    role: str
