from sqlalchemy import Integer, Boolean, ForeignKey, Text, Float
from sqlalchemy.orm import relationship, Mapped, mapped_column
from typing import 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 PaymentRequestProducts(Base):
    """
    PaymentRequestProducts Model: ORM class for PaymentRequestProducts Entity
    """

    __tablename__ = "payment_request_products"

    id: Mapped[int] = mapped_column(Integer, primary_key=True, index=True, autoincrement=True)
    order: Mapped[int] = mapped_column(Integer, default=0)
    is_taxable: Mapped[bool] = mapped_column(Boolean, default=True)
    quantity: Mapped[int] = mapped_column(Integer, default=1)
    description: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
    tax_percent: Mapped[int] = mapped_column(Integer, default=0)
    unit_price: Mapped[float] = mapped_column(Float, default=0.0)

    payment_request_id: Mapped[Optional[int]] = mapped_column(
        Integer, ForeignKey("payment_requests.id"), nullable=True
    )
    payment_request: Mapped[Optional["PaymentRequest"]] = relationship("PaymentRequest")

    product_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey("products.id"), nullable=True)
    product: Mapped[Optional[Any]] = relationship("Product")
