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

if TYPE_CHECKING:
    from typing import Any


class MerchantAcceptances(Base):
    """
    User OTP Model: ORM class for User OTP Entity
    """

    __tablename__ = "merchant_acceptances"

    id: Mapped[int] = mapped_column(Integer, primary_key=True, index=True, autoincrement=True)
    merchant_id: Mapped[int] = mapped_column(Integer, ForeignKey("merchants.id"))
    agreement_accept: Mapped[bool] = mapped_column(Boolean, default=0)
    banking_policy_accept: Mapped[bool] = mapped_column(Boolean, default=0)
    merchant_signing: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
    created_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now())
    updated_at: Mapped[Optional[datetime]] = mapped_column(DateTime, nullable=True, onupdate=func.now())

    merchant: Mapped["Merchant"] = relationship(
        "Merchant", backref=backref("merchant_acceptances", uselist=False)
    )
