# src/utils/validators.py
from fastapi import HTTPException, status
from sqlalchemy.orm import Session
from sqlalchemy.exc import SQLAlchemyError

from src.apps.base.models.locations import Location
from src.apps.base.models.country import Country
from src.apps.base.models.regions import Region
from src.apps.files.models.file import File
from src.utils.enums import ForeignKeyModels

MODEL_MAP = {
    ForeignKeyModels.LOCATION: Location,
    ForeignKeyModels.COUNTRY: Country,
}

def validate_foreign_key(db, model_key: ForeignKeyModels, record_id: int, label: str):
    model_map = {
        ForeignKeyModels.COUNTRY: Country,
        ForeignKeyModels.REGION: Region,
        ForeignKeyModels.LOCATION: Location,
        ForeignKeyModels.FILE: File,  
    }

    model = model_map.get(model_key)
    if not model:
        raise ValueError(f"No model mapped for {model_key}")

    exists = db.query(model).filter(model.id == record_id).first()
    if not exists:
        from fastapi import HTTPException, status
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail=f"{label} with ID {record_id} does not exist."
        )
