"""
Modelos ORM para fracciones arancelarias (SITAR-SCAII)
"""

from typing import Optional

from core.database import Base
from sqlalchemy import Integer, PrimaryKeyConstraint, String, Numeric
from sqlalchemy.orm import Mapped, mapped_column


class TariffFraction(Base):
    """
    Modelo para fracciones arancelarias mexicanas (SITAR-SCAII)
    Catálogo de referencia global (no tenant-scoped)
    Corresponde a la tabla sFracciones
    """

    __tablename__ = "tariff_fractions"
    __table_args__ = (
        PrimaryKeyConstraint("id", name="tariff_fractions_pkey"),
        {"schema": "a76", "extend_existing": True},
    )

    id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
    
    # Código completo de la fracción (ej: 01012101)
    code: Mapped[str] = mapped_column(String(10), unique=True, index=True, nullable=False)
    
    # Fracción formateada (ej: 0101.21.01)
    fraction: Mapped[str] = mapped_column(String(15), index=True)
    
    # Descripción de la fracción
    description: Mapped[Optional[str]] = mapped_column(String(1000))
    
    # Código NICO
    nico: Mapped[Optional[str]] = mapped_column(String(10))
    
    # Unidad de medida de tarifa (UMT)
    umt: Mapped[Optional[str]] = mapped_column(String(10))
    
    # Ad valorem de importación
    adv_impo: Mapped[Optional[str]] = mapped_column(String(20))
    
    # Ad valorem de exportación
    adv_expo: Mapped[Optional[str]] = mapped_column(String(20))

    def __repr__(self) -> str:
        return f"<TariffFraction(code='{self.code}', fraction='{self.fraction}', description='{self.description[:50]}...')>"
