"""支付网关配置模型"""
from sqlalchemy import Integer, String, JSON, UniqueConstraint, Index
from sqlalchemy.orm import Mapped, mapped_column

from app.core.models.base import Base, TimestampMixin, TenantMixin


class PaymentGateway(Base, TenantMixin, TimestampMixin):
    """支付方式配置 — 每种网关一条记录"""

    __tablename__ = "payment_gateways"
    __table_args__ = (
        UniqueConstraint("tenant_id", "code", name="uk_payment_gateways_tenant_code"),
        Index("ix_payment_gateways_tenant", "tenant_id"),
        {
            "mysql_engine": "InnoDB",
            "mysql_charset": "utf8mb4",
            "mysql_collate": "utf8mb4_unicode_ci",
        },
    )

    id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
    code: Mapped[str] = mapped_column(
        String(50), nullable=False, comment="唯一标识，如 windcave"
    )
    name: Mapped[str] = mapped_column(String(100), nullable=False)
    description: Mapped[str | None] = mapped_column(String(255), nullable=True)
    icon: Mapped[str | None] = mapped_column(String(20), nullable=True)
    enabled: Mapped[int] = mapped_column(
        Integer, nullable=False, server_default="0", comment="0=关闭 1=开启"
    )
    sort_order: Mapped[int] = mapped_column(Integer, nullable=False, server_default="0")
    config: Mapped[dict | None] = mapped_column(
        JSON, nullable=True, comment="API keys / secrets 等配置"
    )

    def __repr__(self) -> str:
        return f"<PaymentGateway code={self.code!r} enabled={self.enabled}>"
