from typing import Optional, List, Dict, Any
from datetime import date, datetime
from pydantic import BaseModel, Field, UUID4

class BankAccountSchema(BaseModel):
    id: UUID4
    bank_name: str
    account_number: str
    account_name: str
    currency: str
    current_balance: float
    status: str

    class Config:
        from_attributes = True

class BankTransactionBase(BaseModel):
    transaction_date: datetime
    transaction_reference: Optional[str] = None
    description: str
    debit_amount_vnd: float = 0.0
    credit_amount_vnd: float = 0.0
    running_balance_vnd: Optional[float] = None
    reconciliation_status: str = "unreconciled"

class BankTransactionCreate(BankTransactionBase):
    pass

class BankTransactionResponse(BankTransactionBase):
    id: UUID4
    statement_id: UUID4

    class Config:
        from_attributes = True

class BankStatementUploadResponse(BaseModel):
    statement_id: UUID4
    file_name: str
    total_transactions: int
    transactions: List[BankTransactionResponse]

class ReconciliationSuggestion(BaseModel):
    transaction_id: UUID4
    suggested_invoice_id: Optional[UUID4] = None
    suggested_partner_id: Optional[UUID4] = None
    confidence_score: float = 0.0
    reason: str = ""

class ReconcileRequest(BaseModel):
    matched_invoice_id: Optional[UUID4] = None
    matched_partner_id: Optional[UUID4] = None
    reconciled_amount_vnd: float
    notes: Optional[str] = None
