import logging
from sqlalchemy.orm import Session
from .models import LicenseException

logger = logging.getLogger(__name__)

LICENSE_EXCEPTIONS_DATA = [
    {"key": "NLR", "description": "Licencia no requerida (NLR)."},
    {"key": "LVS", "description": "Los envíos de valor limitado (LVS)."},
    {"key": "EGB", "description": "Los envíos a los países los países del Grupo B (EGB)."},
    {"key": "CIV", "description": "Los usuarios finales Civil (CIV)."},
    {"key": "TSR", "description": "Tecnología y software a restricciones (TSR)."},
    {"key": "APP", "description": "Informática (APP)."},
    {"key": "TMP", "description": "Temporales de las importaciones, exportaciones y reexportaciones (TMP)."},
    {"key": "RPL", "description": "Mantenimiento y sustitución de piezas y equipos (RPL)."},
    {"key": "GFT", "description": "Los gobiernos, Orgs. internacionales, las inspecciones internacionales en virtud del Convenio de Armas Químicas, y la Estación Espacial Internacional (GOB). Regalo parcelas y las donaciones humanitarias (GFT)."},
    {"key": "TSU", "description": "Tecnología y software libre (TSU)."},
    {"key": "BAG", "description": "Equipaje (BAG)."},
    {"key": "AVS", "description": "Las aeronaves y buques (AVS)."},
    {"key": "APR", "description": "Adicional reexportación permisiva (APR)."},
    {"key": "ENC", "description": "Cifrado de productos, software y tecnología (ENC)."},
    {"key": "AGR", "description": "Productos básicos agrícolas (AGR)."},
    {"key": "CCD", "description": "Dispositivos de Comunicaciones del Consumidor (CCD)."},
]

def seed_license_exceptions(db: Session):
    """Seed License Exceptions catalog data"""
    logger.info("Seeding License Exceptions...")
    for item in LICENSE_EXCEPTIONS_DATA:
        db_item = db.query(LicenseException).filter(LicenseException.key == item["key"]).first()
        if not db_item:
            logger.info(f"Adding license exception: {item['key']}")
            new_item = LicenseException(**item)
            db.add(new_item)
        else:
            # Update description if it changed
            if db_item.description != item["description"]:
                logger.info(f"Updating license exception: {item['key']}")
                db_item.description = item["description"]
    db.commit()
    logger.info("License Exceptions seeding completed.")
