from sqlalchemy import DateTime, String, Text, Boolean
from sqlalchemy.orm import Mapped, mapped_column
from sqlalchemy.sql import func
from src.apps.base.models.base import Base


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

    __tablename__ = "payment_methods_card_details"

    id: Mapped[int] = mapped_column(primary_key=True, index=True, autoincrement=True)
    card_number: Mapped[str | None] = mapped_column(String(255), nullable=True)
    brand: Mapped[str | None] = mapped_column(String(255), nullable=True)
    cvv: Mapped[str | None] = mapped_column(String(255), nullable=True)
    funding: Mapped[str | None] = mapped_column(String(50), nullable=True)
    expire_month: Mapped[str | None] = mapped_column(String(255), nullable=True)
    expire_year: Mapped[str | None] = mapped_column(String(255), nullable=True)
    created_at: Mapped[DateTime] = mapped_column(DateTime, server_default=func.now())
    reference_id: Mapped[str | None] = mapped_column(Text, nullable=True, unique=True)
    is_default: Mapped[bool] = mapped_column(Boolean, default=False)
    last_used_at: Mapped[DateTime | None] = mapped_column(DateTime, nullable=True)
    is_autosaved: Mapped[bool] = mapped_column(Boolean, default=True)

    def __init__(self, **kwargs):
        """Initialize PaymentMethodCardDetails with default values"""
        # Set default values if not provided
        kwargs.setdefault('is_default', False)
        kwargs.setdefault('is_autosaved', True)
        super().__init__(**kwargs)
