"""
Carga de conjuntos FK para validación/mapeo de import CSV de Fracciones Americanas.
Clarion: U.M. (GUniMedida), códigos existentes de fracción americana (GFracAme).
"""
from typing import Set, Tuple

from core.database import CoreSessionLocal


def load_fa_fk_sets(
    tenant_id: int,
    company_id: int,
) -> Tuple[Set[str], Set[str]]:
    """
    Carga conjuntos para validación CSV Fracciones Americanas (paridad Clarion).
    Devuelve (valid_uom_codes, existing_fraction_codes).
    - valid_uom_codes: códigos de Unidad de Medida (a76.units_of_measure, code UPPER, max 5 chars).
    - existing_fraction_codes: reservado (vacío); existencia se valida contra SITAR por fila.
    """
    valid_uom_codes: Set[str] = set()
    existing_fraction_codes: Set[str] = set()
    try:
        with CoreSessionLocal() as session:
            from api.v1.modules.a76.general_catalogs.units_of_measure.models import UnitOfMeasure
            for row in (
                session.query(UnitOfMeasure.code)
                .filter(
                    UnitOfMeasure.tenant_id == tenant_id,
                    UnitOfMeasure.company_id == company_id,
                )
                .all()
            ):
                if row[0]:
                    valid_uom_codes.add((row[0].strip() or "").upper()[:5])

    except Exception as e:
        import logging
        logging.getLogger(__name__).warning("FA import: could not load FK sets: %s", e)
    return valid_uom_codes, existing_fraction_codes
