from datetime import datetime
from typing import List, Optional

from pydantic import BaseModel


class OfferLogResponse(BaseModel):
    id: int
    offer_id: int
    created_at: Optional[datetime] = None
    archived_by: Optional[int] = None
    archived_by_name: Optional[str] = None

    class Config:
        from_attributes = True


class DisbursementPhaseResponse(BaseModel):
    id: int
    offer_id: int
    phase: Optional[int] = None
    per_disbursement_amount: Optional[float] = None
    day_from_disbursement_date: Optional[int] = None
    disbursement_at: Optional[str] = None

    class Config:
        from_attributes = True


class MerchantOfferResponse(BaseModel):
    id: int
    merchant_id: int
    interest_type_id: Optional[int] = None
    payment_frequency: Optional[int] = None
    tenure: Optional[int] = None
    advance_emi: Optional[int] = None
    interest_rate: Optional[float] = None
    subvention: Optional[float] = None
    processing_fee: Optional[float] = None
    processing_fee_type: Optional[str] = None
    advance_type: Optional[str] = None
    status: Optional[int] = None
    reason: Optional[str] = None
    disable_offer_status: Optional[int] = None
    subvention_type_id: Optional[int] = None
    annualised_irr: Optional[float] = None
    disbursement_at: Optional[str] = None
    offer_log: List[OfferLogResponse] = []
    disbursement_phases: List[DisbursementPhaseResponse] = []

    class Config:
        from_attributes = True
