from sqlalchemy import Integer, String, DateTime, ForeignKey, Text, Float
from sqlalchemy.sql import func
from sqlalchemy.orm import relationship, Mapped, mapped_column
from typing import Optional, TYPE_CHECKING
from datetime import datetime
from src.apps.base.models.base import Base

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


class PaymentRequestIntent(Base):
    """
    Merchant Note Model: ORM class for Merchant Payment Request Intent Entity
    """

    __tablename__ = "payment_request_intents"

    id: Mapped[int] = mapped_column(Integer, primary_key=True, index=True, autoincrement=True)
    amount: Mapped[float] = mapped_column(Float, default=0)
    intent_id: Mapped[str] = mapped_column(Text, server_default=func.now())
    intent_status: Mapped[Optional[str]] = mapped_column(Text, nullable=True, onupdate=func.now())

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