import sys, types

import numpy as _np
if not hasattr(_np, '_core'):
    import numpy.core as _npc
    _mod = types.ModuleType('numpy._core')
    _mod.multiarray = _npc.multiarray
    sys.modules['numpy._core'] = _mod
    sys.modules['numpy._core.multiarray'] = _npc.multiarray




from transformers import AutoTokenizer, AutoModelForSequenceClassification, pipeline
import pickle
import json
import os

BASE_PATH = r"/var/www/html/mes-ia-odd/models/"

odd_tokenizer = AutoTokenizer.from_pretrained(os.path.join(BASE_PATH, "odd-classifier"), local_files_only=True)
odd_model = AutoModelForSequenceClassification.from_pretrained(os.path.join(BASE_PATH, "odd-classifier"), local_files_only=True)
with open(os.path.join(BASE_PATH, "odd_label_encoder.pkl"), "rb") as f:
    odd_label_encoder = pickle.load(f)
odd_classifier = pipeline("text-classification", model=odd_model, tokenizer=odd_tokenizer, device=-1, top_k=None)

nature_tokenizer = AutoTokenizer.from_pretrained(os.path.join(BASE_PATH, "nature-classifier"), local_files_only=True)
nature_model = AutoModelForSequenceClassification.from_pretrained(os.path.join(BASE_PATH, "nature-classifier"), local_files_only=True)
with open(os.path.join(BASE_PATH, "nature_label_encoder.pkl"), "rb") as f:
    nature_label_encoder = pickle.load(f)
nature_classifier = pipeline("text-classification", model=nature_model, tokenizer=nature_tokenizer, device=-1, top_k=None)

cible_tokenizer = AutoTokenizer.from_pretrained(os.path.join(BASE_PATH, "cible-classifier"), local_files_only=True)
cible_model = AutoModelForSequenceClassification.from_pretrained(os.path.join(BASE_PATH, "cible-classifier"), local_files_only=True)
with open(os.path.join(BASE_PATH, "cible_label_encoder.pkl"), "rb") as f:
    cible_label_encoder = pickle.load(f)
cible_classifier = pipeline("text-classification", model=cible_model, tokenizer=cible_tokenizer, device=-1, top_k=None)

indicateur_tokenizer = AutoTokenizer.from_pretrained(os.path.join(BASE_PATH, "indicateurs-classifier"), local_files_only=True)
indicateur_model = AutoModelForSequenceClassification.from_pretrained(os.path.join(BASE_PATH, "indicateurs-classifier"), local_files_only=True)
with open(os.path.join(BASE_PATH, "indicateurs_label_encoder.pkl"), "rb") as f:
    indicateur_label_encoder = pickle.load(f)
indicateur_classifier = pipeline("text-classification", model=indicateur_model, tokenizer=indicateur_tokenizer, device=-1, top_k=None)

with open(os.path.join(BASE_PATH, "cibles_indicateurs.json"), "r", encoding="utf-8") as f:
    hierarchy_data = json.load(f)


odd_names = {
    "1": "Pas de pauvreté",
    "2": "Faim zéro",
    "3": "Bonnes conditions de vie",
    "4": "Éducation de qualité",
    "5": "Égalité entre les sexes",
    "6": "Eau propre et assainissement",
    "7": "Énergie propre et d'un coût abordable",
    "8": "Travail décent et croissance économique",
    "9": "Industrie, innovation et infrastructure",
    "10": "Inégalités réduites",
    "11": "Villes et communautés durables",
    "12": "Consommation et production responsables",
    "13": "Mesures relatives à la lutte contre les changements climatiques",
    "14": "Vie aquatique",
    "15": "Vie terrestre",
    "16": "Paix, justice et institutions efficaces",
    "17": "Partenariats pour les objectifs durables"
}


nature_names = {
    "1": "Consommation / Accès",
    "2": "Production / Offre",
    "3": "Habilitante / Capacitante",
    "4": "Soutien"
}
