"""Pydantic Request and Response Schemas for Smart Clearing API."""

from __future__ import annotations

from datetime import date, datetime
from decimal import Decimal
from typing import Any, Optional
from uuid import UUID

from pydantic import BaseModel, Field


class BatchClearingRequest(BaseModel):
    dry_run: bool = Field(default=False, description="Nếu true thì chỉ mô phỏng so khớp, không ghi vào CSDL.")
    min_confidence: float = Field(default=0.8, ge=0.0, le=1.0, description="Ngưỡng độ tin cậy tối thiểu để gạch nợ.")
    limit: int = Field(default=300, ge=1, le=1000, description="Số lượng giao dịch quét tối đa.")


class ManualClearingRequest(BaseModel):
    bank_transaction_id: UUID = Field(description="ID giao dịch ngân hàng")
    invoice_id: UUID = Field(description="ID hóa đơn cần cấn trừ")
    settlement_amount_vnd: Decimal = Field(gt=Decimal("0"), description="Số tiền gạch nợ (VNĐ)")
    notes: Optional[str] = Field(default=None, description="Ghi chú nghiệp vụ của kế toán")


class SettlementResponseItem(BaseModel):
    id: UUID
    bank_transaction_id: UUID
    invoice_id: Optional[UUID] = None
    partner_name: Optional[str] = None
    partner_tax_code: Optional[str] = None
    account_code: str
    settlement_amount_vnd: Decimal
    settlement_date: date
    clearing_method: str
    confidence_score: Decimal
    status: str
    notes: Optional[str] = None
    created_at: Optional[datetime] = None


class BatchClearingResponse(BaseModel):
    status: str
    dry_run: bool
    total_transactions_scanned: int
    matched_count: int
    total_cleared_amount_vnd: Decimal
    invoices_settled_count: int
    settlements: list[SettlementResponseItem] = []
