"""CheckoutSettings ORM model — per-merchant defaults."""
from datetime import datetime
from typing import Optional

from sqlalchemy import Integer, Boolean, Text, DateTime, ForeignKey, JSON, String
from sqlalchemy.orm import Mapped, mapped_column
from sqlalchemy.sql import func

from src.apps.base.models.base import Base


class CheckoutSettings(Base):
    __tablename__ = "checkout_settings"

    id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
    merchant_id: Mapped[int] = mapped_column(Integer, ForeignKey("merchants.id"), unique=True, nullable=False, index=True)
    default_tip_enabled: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False)
    default_tip_percentages: Mapped[Optional[list]] = mapped_column(JSON, nullable=True)
    default_thank_you_message: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
    default_redirect_url: Mapped[Optional[str]] = mapped_column(String(500), nullable=True)
    default_tip_allow_custom: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False)
    default_require_payer_verification: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False)
    default_payer_verification_type: Mapped[Optional[str]] = mapped_column(String(20), nullable=True)
    created_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now(), nullable=False)
    updated_at: Mapped[Optional[datetime]] = mapped_column(DateTime, nullable=True, onupdate=func.now())
