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


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

    __tablename__ = "payment_methods_ach_details"

    id: Mapped[int] = mapped_column(primary_key=True, index=True, autoincrement=True)
    account_number: Mapped[str | None] = mapped_column(Text, nullable=True)
    routing_number: Mapped[str | None] = mapped_column(Text, nullable=True)
    account_name: Mapped[str | None] = mapped_column(String(255), nullable=True)
    bank_name: Mapped[str | None] = mapped_column(String(255), nullable=True)
    owner_type: Mapped[str | None] = mapped_column(String(255), nullable=True)
    account_type: 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 PaymentMethodAchDetails with default values"""
        # Set default values if not provided
        kwargs.setdefault('is_default', False)
        kwargs.setdefault('is_autosaved', True)
        super().__init__(**kwargs)
