from typing import Optional
from pydantic import Field
from apps.customers.schemas.customers_common import CustomerSchema
from apps.customers.schemas.customers_contact import CustomerContactSchema
from src.apps.base.schemas.common import BaseSchema
from sqlalchemy.orm import Session


class PaymentRequestCustomersBase(BaseSchema):
    payment_request_id: int = Field(description="Payment is surcharged or not")
    customer_id: int = Field(description="Adjustment description for surcharge")
    payer_id: Optional[int] = Field(description="Adjustment disclaimer for surcharge")
    approver_id: Optional[int] = Field(description="Is the payment discountable?")
    payer_email_request_enabled: Optional[bool] = Field(
        default=False, description="Is the discount is manual"
    )
    payer_email_receipt_enabled: Optional[bool] = Field(
        default=False, description="Manual discount amount"
    )
    payer_sms_request_enabled: Optional[bool] = Field(
        default=False, description="manual discount type percentage/amount"
    )
    payer_sms_receipt_enabled: Optional[bool] = Field(
        default=False, description="Is this a vip discount"
    )
    approver_email_receipt_enabled: Optional[bool] = Field(
        default=False, description="is this a discount type of frequest customer"
    )
    approver_sms_receipt_enabled: Optional[bool] = Field(
        default=False, description="Has any late fee of the payemnt"
    )
    is_approver_approved: Optional[bool] = Field(
        default=False, description="Late fee amount"
    )


class PaymentRequestCustomersSchema(PaymentRequestCustomersBase):
    id: int = Field(description="Id of Payment Request Product resource")
    customer: Optional[CustomerSchema] = Field(
        description="Associated customer, if any"
    )
    payer: Optional[CustomerContactSchema] = Field(
        description="Associated payer, if any"
    )
    approver: Optional[CustomerContactSchema] = Field(
        description="Associated approver, if any"
    )


class PaymentRequestCustomersCreate(PaymentRequestCustomersBase):
    pass


class PaymentRequestCustomersUpdate(PaymentRequestCustomersBase):
    pass
