from typing import Optional
from pydantic import Field, ConfigDict
from src.apps.discount.schemas.common import DiscountSchema
from src.apps.base.schemas.common import BaseSchema
from sqlalchemy.orm import Session


class InvoiceAdjustmentsBase(BaseSchema):
    model_config = ConfigDict(from_attributes=True)
    
    is_surcharged: Optional[bool] = Field(
        default=False, description="Payment is surcharged or not"
    )
    adjustment_description: Optional[str] = Field(
        default=None,
        description="Adjustment description for surcharge"
    )
    disclaimer: Optional[str] = Field(default=None, description="Adjustment disclaimer for surcharge")
    is_discounted: Optional[bool] = Field(
        default=False, description="Is the payment discountable?"
    )
    is_manual_discount: Optional[bool] = Field(
        default=False, description="Is the discount is manual"
    )
    discount_amount: Optional[float] = Field(default=None, description="Manual discount amount")
    discount_type: Optional[str] = Field(
        default=None,
        description="manual discount type percentage/amount"
    )
    discount_name: Optional[str] = Field(default=None, description="Discount coupon name")
    has_late_fee: Optional[bool] = Field(
        default=False, description="Has any late fee of the payemnt"
    )
    fee_amount: Optional[float] = Field(default=None, description="Late fee amount")
    late_fee_type: Optional[str] = Field(
        default=None,
        description="Late fee type e.g. Percentage/Amount"
    )
    fee_frequency: Optional[str] = Field(default=None, description="Late fee frequency")
    late_fee_delay: Optional[int] = Field(default=None, description="Charge late fee after the delay")
    late_fee_delay_frequency: Optional[str] = Field(
        default=None,
        description="Late fee delay frequency"
    )
    cap_fee_amount: Optional[float] = Field(default=None, description="Late cap fee amount")
    discount_id: Optional[str] = Field(default=None, description="Setting discount unique id")


class InvoiceAdjustmentsSchema(InvoiceAdjustmentsBase):
    model_config = ConfigDict(from_attributes=True)
    
    id: Optional[int] = Field(default=None, description="Id of Payment Request Product resource")
    discount_percent: Optional[str] = Field(
        default=None,
        description="Setting discount percent"
    )
    total_discount_amount: Optional[str] = Field(
        default=None,
        description="Setting discount percent"
    )
    merchant_discount: Optional[DiscountSchema] = Field(
        default=None,
        description="Details of description"
    )


class InvoiceAdjustmentsCreate(InvoiceAdjustmentsBase):
    model_config = ConfigDict(from_attributes=True)


class InvoiceAdjustmentsUpdate(InvoiceAdjustmentsBase):
    model_config = ConfigDict(from_attributes=True)
