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


class PaymentRequestAdjustmentsBase(BaseSchema):
    is_surcharged: Optional[bool] = Field(
        default=False, description="Payment is surcharged or not"
    )
    adjustment_description: Optional[str] = Field(
        description="Adjustment description for surcharge"
    )
    disclaimer: Optional[str] = Field(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(description="Manual discount amount")
    discount_type: Optional[str] = Field(
        description="manual discount type percentage/amount"
    )
    discount_name: Optional[str] = Field(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(description="Late fee amount")
    late_fee_type: Optional[str] = Field(
        description="Late fee type e.g. Percentage/Amount"
    )
    fee_frequency: Optional[str] = Field(description="Late fee frequency")
    late_fee_delay: Optional[int] = Field(description="Charge late fee after the delay")
    late_fee_delay_frequency: Optional[str] = Field(
        description="Late fee delay frequency"
    )
    cap_fee_amount: Optional[float] = Field(description="Late cap fee amount")
    discount_id: Optional[str] = Field(description="Setting discount unique id")


class PaymentRequestAdjustmentsSchema(PaymentRequestAdjustmentsBase):
    id: Optional[int] = Field(description="Id of Payment Request Product resource")
    discount_percent: Optional[str] = Field(
        description="Setting discount percent", default=None
    )
    total_discount_amount: Optional[str] = Field(
        description="Setting discount percent", default=None
    )
    merchant_discount: Optional[DiscountSchema] = Field(
        description="Details of description"
    )


class PaymentRequestAdjustmentsCreate(PaymentRequestAdjustmentsBase):
    pass


class PaymentRequestAdjustmentsUpdate(PaymentRequestAdjustmentsBase):
    # object_id: Optional[int] = Field(description="ID of the item")
    pass
