from sqlalchemy import Integer, Boolean, ForeignKey
from sqlalchemy.orm import relationship, Mapped, mapped_column
from typing import List, Optional, TYPE_CHECKING, Any
from src.apps.base.models.base import Base

if TYPE_CHECKING:
    from src.apps.payment_requests.models.payment_request import PaymentRequest

class PaymentRequestCustomer(Base):
    """
    PaymentRequestCustomer Model: ORM class for PaymentRequestCustomer Entity
    """

    __tablename__ = "payment_requests_customers"

    id: Mapped[int] = mapped_column(Integer, primary_key=True, index=True, autoincrement=True)
    payment_request_id: Mapped[int] = mapped_column(Integer, ForeignKey("payment_requests.id"))
    payment_requests: Mapped["PaymentRequest"] = relationship(
        "PaymentRequest", back_populates="payment_request_customers"
    )

    customer_id: Mapped[int] = mapped_column(Integer, ForeignKey("customers.id"))
    customer: Mapped[Any] = relationship("Customer", foreign_keys=[customer_id], uselist=False)

    payer_id: Mapped[int] = mapped_column(Integer, ForeignKey("customer_contacts.id"))
    payer: Mapped[Any] = relationship("CustomerContact", foreign_keys=[payer_id], uselist=False)

    approver_id: Mapped[int] = mapped_column(Integer, ForeignKey("customer_contacts.id"), nullable=True)
    approver: Mapped[Any] = relationship(
        "CustomerContact", foreign_keys=[approver_id], uselist=False
    )

    payer_email_request_enabled: Mapped[bool] = mapped_column(Boolean, default=False)
    payer_email_receipt_enabled: Mapped[bool] = mapped_column(Boolean, default=False)
    payer_sms_request_enabled: Mapped[bool] = mapped_column(Boolean, default=False)
    payer_sms_receipt_enabled: Mapped[bool] = mapped_column(Boolean, default=False)
    approver_email_receipt_enabled: Mapped[bool] = mapped_column(Boolean, default=False)
    approver_sms_receipt_enabled: Mapped[bool] = mapped_column(Boolean, default=False)
    is_approver_approved: Mapped[bool] = mapped_column(Boolean, default=False)
