-- Export des triggers de la base `jobplut618`
-- Date : 2025-12-08 02:20:25

DELIMITER ;;
CREATE TRIGGER `appli_hardskills_recruiters_bi` BEFORE INSERT ON `appli_hardskills_recruiters` FOR EACH ROW BEGIN
    -- Déclaration des variables de traduction
    DECLARE v_jobtitle_en_lookup VARCHAR(255) DEFAULT NULL;
    DECLARE v_jobtitle_fr_lookup VARCHAR(255) DEFAULT NULL;
    
    -- Gestionnaire d'erreur : Si la requête ne trouve rien, les variables restent NULL
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_jobtitle_en_lookup = NULL, v_jobtitle_fr_lookup = NULL; 

    -- Initialisation des colonnes de traduction avec la valeur saisie (sécurité par défaut)
    SET NEW.jobtitle_FR = NEW.jobtitle;
    SET NEW.jobtitle_EN = NEW.jobtitle;

    -- *** DÉBUT LOGIQUE DE TRADUCTION ***

    -- Cas 1 : La langue saisie est le français (FR)
    IF NEW.lg_iso2 = 'FR' THEN
        
        -- Recherche de l'équivalent EN
        SELECT jobtitle_EN
        INTO v_jobtitle_en_lookup
        FROM appli_vw_jobtitle_EN_FR
        WHERE jobtitle_FR = NEW.jobtitle
        LIMIT 1;

        -- Mise à jour de la colonne EN si une traduction est trouvée
        SET NEW.jobtitle_EN = COALESCE(v_jobtitle_en_lookup, NEW.jobtitle);

    -- Cas 2 : La langue saisie est l'anglais (EN)
    ELSEIF NEW.lg_iso2 = 'EN' THEN
        
        -- Recherche de l'équivalent FR
        SELECT jobtitle_FR
        INTO v_jobtitle_fr_lookup
        FROM appli_vw_jobtitle_EN_FR
        WHERE jobtitle_EN = NEW.jobtitle 
        LIMIT 1;

        -- Mise à jour de la colonne FR si une traduction est trouvée
        SET NEW.jobtitle_FR = COALESCE(v_jobtitle_fr_lookup, NEW.jobtitle);
        
        -- NEW.jobtitle_EN conserve la valeur saisie (déjà fait par l'initialisation)

    -- Cas 3 (ELSE) : Toute autre langue (lg_iso2 est NULL ou autre)
    -- Les colonnes NEW.jobtitle_FR et NEW.jobtitle_EN conservent la valeur saisie
    -- grâce à l'initialisation faite au début. Pas besoin de code supplémentaire ici.
    
    END IF; -- Cette ligne est CRUCIALE et doit être présente.

    -- NEW.jobtitle conserve la valeur d'entrée.

END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `appli_hardskills_recruiters_bu` BEFORE UPDATE ON `appli_hardskills_recruiters` FOR EACH ROW BEGIN
    -- Déclaration des variables de traduction
    DECLARE v_jobtitle_en_lookup VARCHAR(255) DEFAULT NULL;
    DECLARE v_jobtitle_fr_lookup VARCHAR(255) DEFAULT NULL;
    
    -- Gestionnaire d'erreur : Si la requête ne trouve rien, les variables restent NULL
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_jobtitle_en_lookup = NULL, v_jobtitle_fr_lookup = NULL; 

    -- Initialisation des colonnes de traduction avec la valeur saisie (sécurité par défaut)
    SET NEW.jobtitle_FR = NEW.jobtitle;
    SET NEW.jobtitle_EN = NEW.jobtitle;

    -- *** DÉBUT LOGIQUE DE TRADUCTION ***

    -- Cas 1 : La langue saisie est le français (FR)
    IF NEW.lg_iso2 = 'FR' THEN
        
        -- Recherche de l'équivalent EN
        SELECT jobtitle_EN
        INTO v_jobtitle_en_lookup
        FROM appli_vw_jobtitle_EN_FR
        WHERE jobtitle_FR = NEW.jobtitle
        LIMIT 1;

        -- Mise à jour de la colonne EN si une traduction est trouvée
        SET NEW.jobtitle_EN = COALESCE(v_jobtitle_en_lookup, NEW.jobtitle);

    -- Cas 2 : La langue saisie est l'anglais (EN)
    ELSEIF NEW.lg_iso2 = 'EN' THEN
        
        -- Recherche de l'équivalent FR
        SELECT jobtitle_FR
        INTO v_jobtitle_fr_lookup
        FROM appli_vw_jobtitle_EN_FR
        WHERE jobtitle_EN = NEW.jobtitle 
        LIMIT 1;

        -- Mise à jour de la colonne FR si une traduction est trouvée
        SET NEW.jobtitle_FR = COALESCE(v_jobtitle_fr_lookup, NEW.jobtitle);
        
        -- NEW.jobtitle_EN conserve la valeur saisie (déjà fait par l'initialisation)

    -- Cas 3 (ELSE) : Toute autre langue (lg_iso2 est NULL ou autre)
    -- Les colonnes NEW.jobtitle_FR et NEW.jobtitle_EN conservent la valeur saisie
    -- grâce à l'initialisation faite au début. Pas besoin de code supplémentaire ici.
    
    END IF; -- Cette ligne est CRUCIALE et doit être présente.

    -- NEW.jobtitle conserve la valeur d'entrée.

END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `appli_jobtitle_family_recruiters_bi` BEFORE INSERT ON `appli_jobtitle_recruiters` FOR EACH ROW BEGIN
    -- Déclare une variable pour stocker le family_name trouvé
    DECLARE v_family_name VARCHAR(100);

    -- Recherche le family_name dans appli_ref_fjsh_en
    -- en utilisant le jobtitle_en de la nouvelle ligne (NEW.jobtitle_en)
    SELECT
        t2.family_name INTO v_family_name
    FROM
        appli_ref_fjsh_en AS t2
    WHERE
        t2.jobtitle = NEW.jobtitle_en
    LIMIT 1;

    -- Affecte la valeur trouvée (ou NULL si rien n'est trouvé) à jobtitle_family
    SET NEW.jobtitle_family = v_family_name;
END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `appli_jobtitle_family_recruiters_bu` BEFORE UPDATE ON `appli_jobtitle_recruiters` FOR EACH ROW BEGIN
    -- Déclare une variable pour stocker le family_name trouvé
    DECLARE v_family_name VARCHAR(100);

    -- Recherche le family_name dans appli_ref_fjsh_en
    -- en utilisant le jobtitle_en de la nouvelle ligne (NEW.jobtitle_en)
    SELECT
        t2.family_name INTO v_family_name
    FROM
        appli_ref_fjsh_en AS t2
    WHERE
        t2.jobtitle = NEW.jobtitle_en
    LIMIT 1;

    -- Affecte la valeur trouvée (ou NULL si rien n'est trouvé) à jobtitle_family
    SET NEW.jobtitle_family = v_family_name;
END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `trg_jobtitle_recruiters_bi` BEFORE INSERT ON `appli_jobtitle_recruiters` FOR EACH ROW BEGIN
    -- Déclare une variable pour stocker le family_name trouvé
    DECLARE v_family_name VARCHAR(100);

    -- Recherche le family_name dans appli_ref_fjsh_en
    -- en utilisant le jobtitle_en de la nouvelle ligne (NEW.jobtitle_en)
    SELECT
        t2.family_name INTO v_family_name
    FROM
        appli_ref_fjsh_en AS t2
    WHERE
        t2.jobtitle = NEW.jobtitle_en
    LIMIT 1;

    -- Affecte la valeur trouvée (ou NULL si rien n'est trouvé) à jobtitle_family
    SET NEW.jobtitle_family = v_family_name;
END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `trg_jobtitle_recruiters_bu` BEFORE UPDATE ON `appli_jobtitle_recruiters` FOR EACH ROW BEGIN
    -- Déclare une variable pour stocker le family_name trouvé
    DECLARE v_family_name VARCHAR(100);

    -- Recherche le family_name dans appli_ref_fjsh_en
    -- en utilisant le jobtitle_en de la nouvelle ligne (NEW.jobtitle_en)
    SELECT
        t2.family_name INTO v_family_name
    FROM
        appli_ref_fjsh_en AS t2
    WHERE
        t2.jobtitle = NEW.jobtitle_en
    LIMIT 1;

    -- Affecte la valeur trouvée (ou NULL si rien n'est trouvé) à jobtitle_family
    SET NEW.jobtitle_family = v_family_name;
END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `appli_jobtitle_familly_insert` BEFORE INSERT ON `appli_jobtitle_seekers` FOR EACH ROW BEGIN
    -- Déclaration d'une variable pour stocker la famille trouvée
    DECLARE v_jobtitle_family VARCHAR(100) DEFAULT NULL;

    -- Récupérer la 'family' correspondante
    SELECT T1.family INTO v_jobtitle_family
    FROM appli_ref_jobtitle AS T1
    WHERE T1.jobtitle = NEW.jobtitle_en
    LIMIT 1;

    -- Mettre à jour la colonne jobtitle_family de l'enregistrement en cours (NEW)
    IF v_jobtitle_family IS NOT NULL THEN
        SET NEW.jobtitle_family = v_jobtitle_family;
    ELSE
        -- Affecter une chaîne vide ou par défaut pour respecter la contrainte NOT NULL
        SET NEW.jobtitle_family = ''; -- Utilisez 'Inconnu' si c'est plus clair pour vos données
    END IF;
END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `appli_jobtitle_family_update` BEFORE UPDATE ON `appli_jobtitle_seekers` FOR EACH ROW BEGIN
    -- Déclaration d'une variable pour stocker la famille trouvée
    DECLARE v_jobtitle_family VARCHAR(100) DEFAULT NULL;

    -- Vérifier si jobtitle_en a été modifié et n'est pas NULL
    IF NEW.jobtitle_en IS NOT NULL AND NEW.jobtitle_en <> OLD.jobtitle_en THEN
        
        -- Tenter de récupérer la 'family' correspondante
        SELECT T1.family INTO v_jobtitle_family
        FROM appli_ref_jobtitle AS T1
        WHERE T1.jobtitle = NEW.jobtitle_en
        LIMIT 1;

        -- Mettre à jour la colonne jobtitle_family
        IF v_jobtitle_family IS NOT NULL THEN
            -- Une nouvelle famille a été trouvée
            SET NEW.jobtitle_family = v_jobtitle_family;
        ELSE
            -- Si aucune correspondance n'est trouvée :
            -- 1. Si l'ancienne valeur n'était pas NULL, on la conserve.
            IF OLD.jobtitle_family IS NOT NULL THEN
                SET NEW.jobtitle_family = OLD.jobtitle_family;
            ELSE
                -- 2. Cas extrême : Si l'ancienne valeur était NULL (rare si la colonne est NOT NULL)
                --    Nous devons insérer une chaîne vide ou une valeur par défaut acceptable
                --    pour éviter l'erreur "cannot be null".
                SET NEW.jobtitle_family = ''; -- Remplacez par 'Inconnu' si préférable
            END IF;
            
        END IF;
    END IF;
END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `appli_jobtitle_seekers_bi` BEFORE INSERT ON `appli_jobtitle_seekers` FOR EACH ROW BEGIN
  -- Déclaration de la variable locale pour stocker le résultat de la recherche EN
  DECLARE v_jobtitle_en_lookup VARCHAR(255) DEFAULT NULL;
  
  -- Gestionnaire d'erreur : Si la requête ne trouve rien, la variable reste NULL et le trigger continue.
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_jobtitle_en_lookup = NULL; 

  -- Cas 1 : Si la langue est française (FR)
  -- On utilise NEW.jobtitle (valeur FR) pour chercher l'équivalent EN dans la vue.
  IF NEW.lg_iso2 = 'FR' THEN
    
    -- Recherche de l'équivalent EN
    SELECT jobtitle_EN
    INTO v_jobtitle_en_lookup
    FROM appli_vw_jobtitle_EN_FR
    WHERE jobtitle_FR = NEW.jobtitle
    LIMIT 1;

    -- Si une traduction a été trouvée
    IF v_jobtitle_en_lookup IS NOT NULL THEN
      -- On met l'équivalent EN dans la colonne cible
      SET NEW.jobtitle_en = v_jobtitle_en_lookup;
    ELSE
      -- Si aucune traduction n'est trouvée, on utilise la valeur saisie (FR) par défaut dans jobtitle_en
      SET NEW.jobtitle_en = NEW.jobtitle; 
    END IF;

  -- Cas 2 : Si la langue est anglaise (EN) ou toute autre langue
  -- On met simplement la valeur saisie dans jobtitle_en.
  ELSE 
    -- On s'assure que la colonne cible jobtitle_en est bien renseignée avec la valeur d'entrée
    SET NEW.jobtitle_en = NEW.jobtitle;
    
  END IF;
  
END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `appli_jobtitle_seekers_bu` BEFORE UPDATE ON `appli_jobtitle_seekers` FOR EACH ROW BEGIN
  -- Déclaration de la variable locale pour stocker le résultat de la recherche EN
  DECLARE v_jobtitle_en_lookup VARCHAR(255) DEFAULT NULL;
  
  -- Gestionnaire d'erreur : Si la requête ne trouve rien, la variable reste NULL et le trigger continue.
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_jobtitle_en_lookup = NULL; 

  -- Cas 1 : Si la langue est française (FR)
  -- On utilise NEW.jobtitle (valeur FR) pour chercher l'équivalent EN dans la vue.
  IF NEW.lg_iso2 = 'FR' THEN
    
    -- Recherche de l'équivalent EN
    SELECT jobtitle_EN
    INTO v_jobtitle_en_lookup
    FROM appli_vw_jobtitle_EN_FR
    WHERE jobtitle_FR = NEW.jobtitle
    LIMIT 1;

    -- Si une traduction a été trouvée
    IF v_jobtitle_en_lookup IS NOT NULL THEN
      -- On met l'équivalent EN dans la colonne cible
      SET NEW.jobtitle_en = v_jobtitle_en_lookup;
    ELSE
      -- Si aucune traduction n'est trouvée, on utilise la valeur saisie (FR) par défaut dans jobtitle_en
      SET NEW.jobtitle_en = NEW.jobtitle; 
    END IF;

  -- Cas 2 : Si la langue est anglaise (EN) ou toute autre langue
  -- On met simplement la valeur saisie dans jobtitle_en.
  ELSE 
    -- On s'assure que la colonne cible jobtitle_en est bien renseignée avec la valeur d'entrée
    SET NEW.jobtitle_en = NEW.jobtitle;
    
  END IF;
  
END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `trg_calc_amount_recruiters_insert` BEFORE INSERT ON `appli_pay_recruiters` FOR EACH ROW BEGIN
    IF NEW.period = 'daily' THEN
        SET NEW.calc_amount = NEW.salary * 20;
    ELSEIF NEW.period = 'weekly' THEN
        SET NEW.calc_amount = NEW.salary * 4;
    ELSEIF NEW.period = 'hourly' THEN
        SET NEW.calc_amount = NEW.salary * 160;
    ELSEIF NEW.period = 'yearly' THEN
        SET NEW.calc_amount = NEW.salary / 12;
    ELSE
        SET NEW.calc_amount = NEW.salary;
    END IF;
END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `trg_calc_amount_recruiters_update` BEFORE UPDATE ON `appli_pay_recruiters` FOR EACH ROW BEGIN
    IF NEW.period = 'daily' THEN
        SET NEW.calc_amount = NEW.salary * 20;
    ELSEIF NEW.period = 'weekly' THEN
        SET NEW.calc_amount = NEW.salary * 4;
    ELSEIF NEW.period = 'hourly' THEN
        SET NEW.calc_amount = NEW.salary * 160;
    ELSEIF NEW.period = 'yearly' THEN
        SET NEW.calc_amount = NEW.salary / 12;
    ELSE
        SET NEW.calc_amount = NEW.salary;
    END IF;
END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `trg_calc_amount_seekers_insert` BEFORE INSERT ON `appli_pay_seekers` FOR EACH ROW BEGIN
    IF NEW.period = 'daily' THEN
        SET NEW.calc_amount = NEW.salary * 20;
    ELSEIF NEW.period = 'weekly' THEN
        SET NEW.calc_amount = NEW.salary * 4;
    ELSEIF NEW.period = 'hourly' THEN
        SET NEW.calc_amount = NEW.salary * 160;
    ELSEIF NEW.period = 'yearly' THEN
        SET NEW.calc_amount = NEW.salary / 12;
    ELSE
        SET NEW.calc_amount = NEW.salary;
    END IF;
END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `trg_calc_amount_seekers_update` BEFORE UPDATE ON `appli_pay_seekers` FOR EACH ROW BEGIN
    IF NEW.period = 'daily' THEN
        SET NEW.calc_amount = NEW.salary * 20;
    ELSEIF NEW.period = 'weekly' THEN
        SET NEW.calc_amount = NEW.salary * 4;
    ELSEIF NEW.period = 'hourly' THEN
        SET NEW.calc_amount = NEW.salary * 160;
    ELSEIF NEW.period = 'yearly' THEN
        SET NEW.calc_amount = NEW.salary / 12;
    ELSE
        SET NEW.calc_amount = NEW.salary;
    END IF;
END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `appli_profiles_bi` BEFORE INSERT ON `appli_profiles` FOR EACH ROW BEGIN
  -- Déclaration de la variable locale pour stocker le résultat de la recherche EN
  DECLARE v_jobtitle_en_lookup VARCHAR(255) DEFAULT NULL;
  
  -- Gestionnaire d'erreur : Si la requête ne trouve rien, la variable reste NULL et le trigger continue.
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_jobtitle_en_lookup = NULL; 

  -- On tente TOUJOURS de chercher l'équivalent EN
  -- On utilise NEW.jobtitle_actif pour chercher l'équivalent EN dans la vue.
    
  -- Recherche de l'équivalent EN, en supposant que jobtitle_actif pourrait être en FR
  SELECT jobtitle_EN
  INTO v_jobtitle_en_lookup
  FROM appli_vw_jobtitle_EN_FR
  WHERE jobtitle_FR = NEW.jobtitle_actif
  LIMIT 1;

  -- Test de la découverte :
  IF v_jobtitle_en_lookup IS NOT NULL THEN
    -- Cas 1 : Une traduction a été trouvée (jobtitle_actif était donc un titre FR connu)
    -- On met l'équivalent EN dans la NOUVELLE colonne cible jobtitle_actif_en
    SET NEW.jobtitle_actif_en = v_jobtitle_en_lookup; -- CHANGEMENT : Anciennement NEW.jobtitle_en
  ELSE
    -- Cas 2 : Aucune traduction n'est trouvée (jobtitle_actif est soit un titre EN, soit un titre FR inconnu)
    -- On utilise la valeur saisie (NEW.jobtitle_actif) par défaut dans jobtitle_actif_en
    SET NEW.jobtitle_actif_en = NEW.jobtitle_actif; -- CHANGEMENT : Anciennement NEW.jobtitle_en
  END IF;

END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `appli_profiles_bu` BEFORE UPDATE ON `appli_profiles` FOR EACH ROW BEGIN
  -- Déclaration de la variable locale pour stocker le résultat de la recherche EN
  DECLARE v_jobtitle_en_lookup VARCHAR(255) DEFAULT NULL;
  
  -- Gestionnaire d'erreur : Si la requête ne trouve rien, la variable reste NULL et le trigger continue.
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_jobtitle_en_lookup = NULL; 

  -- On tente TOUJOURS de chercher l'équivalent EN
  -- On utilise NEW.jobtitle_actif pour chercher l'équivalent EN dans la vue.
    
  -- Recherche de l'équivalent EN, en supposant que jobtitle_actif pourrait être en FR
  SELECT jobtitle_EN
  INTO v_jobtitle_en_lookup
  FROM appli_vw_jobtitle_EN_FR
  WHERE jobtitle_FR = NEW.jobtitle_actif
  LIMIT 1;

  -- Test de la découverte :
  IF v_jobtitle_en_lookup IS NOT NULL THEN
    -- Cas 1 : Une traduction a été trouvée (jobtitle_actif était donc un titre FR connu)
    -- On met l'équivalent EN dans la NOUVELLE colonne cible jobtitle_actif_en
    SET NEW.jobtitle_actif_en = v_jobtitle_en_lookup; -- CHANGEMENT : Anciennement NEW.jobtitle_en
  ELSE
    -- Cas 2 : Aucune traduction n'est trouvée (jobtitle_actif est soit un titre EN, soit un titre FR inconnu)
    -- On utilise la valeur saisie (NEW.jobtitle_actif) par défaut dans jobtitle_actif_en
    SET NEW.jobtitle_actif_en = NEW.jobtitle_actif; -- CHANGEMENT : Anciennement NEW.jobtitle_en
  END IF;

END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `appli_recru_empl_apply_bi` BEFORE INSERT ON `appli_recru_empl_apply` FOR EACH ROW BEGIN
  -- Déclaration de la variable locale pour stocker le résultat de la recherche EN
  DECLARE v_jobtitle_en_lookup VARCHAR(255) DEFAULT NULL;
  
  -- Gestionnaire d'erreur : Si la requête ne trouve rien, la variable reste NULL et le trigger continue.
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_jobtitle_en_lookup = NULL; 

  -- Cas 1 : Si la langue est française (FR)
  -- On utilise NEW.jobtitle (valeur FR) pour chercher l'équivalent EN dans la vue.
  IF NEW.lg_iso2 = 'FR' THEN
    
    -- Recherche de l'équivalent EN
    SELECT jobtitle_EN
    INTO v_jobtitle_en_lookup
    FROM appli_vw_jobtitle_EN_FR
    WHERE jobtitle_FR = NEW.jobtitle
    LIMIT 1;

    -- Si une traduction a été trouvée
    IF v_jobtitle_en_lookup IS NOT NULL THEN
      -- On met l'équivalent EN dans la colonne cible
      SET NEW.jobtitle_en = v_jobtitle_en_lookup;
    ELSE
      -- Si aucune traduction n'est trouvée, on utilise la valeur saisie (FR) par défaut dans jobtitle_en
      SET NEW.jobtitle_en = NEW.jobtitle; 
    END IF;

  -- Cas 2 : Si la langue est anglaise (EN) ou toute autre langue
  -- On met simplement la valeur saisie dans jobtitle_en.
  ELSE 
    -- On s'assure que la colonne cible jobtitle_en est bien renseignée avec la valeur d'entrée
    SET NEW.jobtitle_en = NEW.jobtitle;
    
  END IF;
  
END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `appli_recru_empl_apply_bu` BEFORE UPDATE ON `appli_recru_empl_apply` FOR EACH ROW BEGIN
  -- Déclaration de la variable locale pour stocker le résultat de la recherche EN
  DECLARE v_jobtitle_en_lookup VARCHAR(255) DEFAULT NULL;
  
  -- Gestionnaire d'erreur : Si la requête ne trouve rien, la variable reste NULL et le trigger continue.
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_jobtitle_en_lookup = NULL; 

  -- Cas 1 : Si la langue est française (FR)
  -- On utilise NEW.jobtitle (valeur FR) pour chercher l'équivalent EN dans la vue.
  IF NEW.lg_iso2 = 'FR' THEN
    
    -- Recherche de l'équivalent EN
    SELECT jobtitle_EN
    INTO v_jobtitle_en_lookup
    FROM appli_vw_jobtitle_EN_FR
    WHERE jobtitle_FR = NEW.jobtitle
    LIMIT 1;

    -- Si une traduction a été trouvée
    IF v_jobtitle_en_lookup IS NOT NULL THEN
      -- On met l'équivalent EN dans la colonne cible
      SET NEW.jobtitle_en = v_jobtitle_en_lookup;
    ELSE
      -- Si aucune traduction n'est trouvée, on utilise la valeur saisie (FR) par défaut dans jobtitle_en
      SET NEW.jobtitle_en = NEW.jobtitle; 
    END IF;

  -- Cas 2 : Si la langue est anglaise (EN) ou toute autre langue
  -- On met simplement la valeur saisie dans jobtitle_en.
  ELSE 
    -- On s'assure que la colonne cible jobtitle_en est bien renseignée avec la valeur d'entrée
    SET NEW.jobtitle_en = NEW.jobtitle;
    
  END IF;
  
END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `appli_recruiters_bi` BEFORE INSERT ON `appli_recruiters` FOR EACH ROW BEGIN
  -- 1. Déclarations de TOUTES les Variables (DOIT être en premier)
  
  -- Variable pour la logique de traduction EN
  DECLARE v_jobtitle_en_lookup VARCHAR(255) DEFAULT NULL;
  
  -- Variable pour la logique de recherche de famille
  DECLARE v_jobtitle_family VARCHAR(100) DEFAULT NULL;

  
  -- 2. Déclaration du Gestionnaire d'Erreur (DOIT venir après les variables)
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_jobtitle_en_lookup = NULL; 
  
  
  -- LOGIQUE 1 : TRADUCTION FR -> EN
  
  -- Recherche de l'équivalent EN
  SELECT jobtitle_EN
  INTO v_jobtitle_en_lookup
  FROM appli_vw_jobtitle_EN_FR
  WHERE jobtitle_FR = NEW.jobtitle
  LIMIT 1;

  -- Affectation du résultat à NEW.jobtitle_en
  IF v_jobtitle_en_lookup IS NOT NULL THEN
    SET NEW.jobtitle_en = v_jobtitle_en_lookup;
  ELSE
    SET NEW.jobtitle_en = NEW.jobtitle;
  END IF;

  
  -- LOGIQUE 2 : RECHERCHE DE FAMILLE

  -- Récupérer la 'family' en utilisant NEW.jobtitle_en
  SELECT T1.family INTO v_jobtitle_family
  FROM appli_ref_jobtitle AS T1
  WHERE T1.jobtitle = NEW.jobtitle_en
  LIMIT 1;

  -- Mettre à jour NEW.jobtitle_family
  IF v_jobtitle_family IS NOT NULL THEN
    SET NEW.jobtitle_family = v_jobtitle_family;
  ELSE
    SET NEW.jobtitle_family = '';
  END IF;
  
END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `appli_recruiters_bu` BEFORE UPDATE ON `appli_recruiters` FOR EACH ROW BEGIN
    -- Déclaration d'une variable pour stocker la famille trouvée
    DECLARE v_jobtitle_family VARCHAR(100) DEFAULT NULL;

    -- Vérifier si jobtitle_en a été modifié et n'est pas NULL
    IF NEW.jobtitle_en IS NOT NULL AND NEW.jobtitle_en <> OLD.jobtitle_en THEN
        
        -- Tenter de récupérer la 'family' correspondante
        SELECT T1.family INTO v_jobtitle_family
        FROM appli_ref_jobtitle AS T1
        WHERE T1.jobtitle = NEW.jobtitle_en
        LIMIT 1;

        -- Mettre à jour la colonne jobtitle_family
        IF v_jobtitle_family IS NOT NULL THEN
            -- Une nouvelle famille a été trouvée
            SET NEW.jobtitle_family = v_jobtitle_family;
        ELSE
            -- Si aucune correspondance n'est trouvée :
            -- 1. Si l'ancienne valeur n'était pas NULL, on la conserve.
            IF OLD.jobtitle_family IS NOT NULL THEN
                SET NEW.jobtitle_family = OLD.jobtitle_family;
            ELSE
                -- 2. Cas extrême : Si l'ancienne valeur était NULL (rare si la colonne est NOT NULL)
                --    Nous devons insérer une chaîne vide ou une valeur par défaut acceptable
                --    pour éviter l'erreur "cannot be null".
                SET NEW.jobtitle_family = ''; -- Remplacez par 'Inconnu' si préférable
            END IF;
            
        END IF;
    END IF;
END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `appli_recruiters_family_name_bi` BEFORE INSERT ON `appli_recruiters` FOR EACH ROW BEGIN
    -- Déclare une variable pour stocker le family_name trouvé
    DECLARE v_family_name VARCHAR(100);

    -- Recherche le family_name dans appli_ref_fjsh_en
    -- en utilisant le jobtitle_en de la nouvelle ligne (NEW.jobtitle_en)
    SELECT
        t2.family_name INTO v_family_name
    FROM
        appli_ref_fjsh_en AS t2
    WHERE
        t2.jobtitle = NEW.jobtitle_en
    LIMIT 1;

    -- Affecte la valeur trouvée (ou NULL si rien n'est trouvé) à jobtitle_family
    SET NEW.jobtitle_family = v_family_name;
END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `appli_recruiters_family_name_bu` BEFORE UPDATE ON `appli_recruiters` FOR EACH ROW BEGIN
    -- Déclare une variable pour stocker le family_name trouvé
    DECLARE v_family_name VARCHAR(100);

    -- Recherche le family_name dans appli_ref_fjsh_en
    -- en utilisant le jobtitle_en de la nouvelle ligne (NEW.jobtitle_en)
    SELECT
        t2.family_name INTO v_family_name
    FROM
        appli_ref_fjsh_en AS t2
    WHERE
        t2.jobtitle = NEW.jobtitle_en
    LIMIT 1;

    -- Affecte la valeur trouvée (ou NULL si rien n'est trouvé) à jobtitle_family
    SET NEW.jobtitle_family = v_family_name;
END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `appli_softskills_recruiters_bi` BEFORE INSERT ON `appli_softskills_recruiters` FOR EACH ROW BEGIN
    -- Déclaration des variables de traduction
    DECLARE v_jobtitle_en_lookup VARCHAR(255) DEFAULT NULL;
    DECLARE v_jobtitle_fr_lookup VARCHAR(255) DEFAULT NULL;
    
    -- Gestionnaire d'erreur : Si la requête ne trouve rien, les variables restent NULL
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_jobtitle_en_lookup = NULL, v_jobtitle_fr_lookup = NULL; 

    -- Initialisation des colonnes de traduction avec la valeur saisie (sécurité par défaut)
    SET NEW.jobtitle_FR = NEW.jobtitle;
    SET NEW.jobtitle_EN = NEW.jobtitle;

    -- *** DÉBUT LOGIQUE DE TRADUCTION ***

    -- Cas 1 : La langue saisie est le français (FR)
    IF NEW.lg_iso2 = 'FR' THEN
        
        -- Recherche de l'équivalent EN
        SELECT jobtitle_EN
        INTO v_jobtitle_en_lookup
        FROM appli_vw_jobtitle_EN_FR
        WHERE jobtitle_FR = NEW.jobtitle
        LIMIT 1;

        -- Mise à jour de la colonne EN si une traduction est trouvée
        SET NEW.jobtitle_EN = COALESCE(v_jobtitle_en_lookup, NEW.jobtitle);

    -- Cas 2 : La langue saisie est l'anglais (EN)
    ELSEIF NEW.lg_iso2 = 'EN' THEN
        
        -- Recherche de l'équivalent FR
        SELECT jobtitle_FR
        INTO v_jobtitle_fr_lookup
        FROM appli_vw_jobtitle_EN_FR
        WHERE jobtitle_EN = NEW.jobtitle 
        LIMIT 1;

        -- Mise à jour de la colonne FR si une traduction est trouvée
        SET NEW.jobtitle_FR = COALESCE(v_jobtitle_fr_lookup, NEW.jobtitle);
        
        -- NEW.jobtitle_EN conserve la valeur saisie (déjà fait par l'initialisation)

    -- Cas 3 (ELSE) : Toute autre langue (lg_iso2 est NULL ou autre)
    -- Les colonnes NEW.jobtitle_FR et NEW.jobtitle_EN conservent la valeur saisie
    -- grâce à l'initialisation faite au début. Pas besoin de code supplémentaire ici.
    
    END IF; -- Cette ligne est CRUCIALE et doit être présente.

    -- NEW.jobtitle conserve la valeur d'entrée.

END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `appli_softskills_recruiters_bu` BEFORE UPDATE ON `appli_softskills_recruiters` FOR EACH ROW BEGIN
    -- Déclaration des variables de traduction
    DECLARE v_jobtitle_en_lookup VARCHAR(255) DEFAULT NULL;
    DECLARE v_jobtitle_fr_lookup VARCHAR(255) DEFAULT NULL;
    
    -- Gestionnaire d'erreur : Si la requête ne trouve rien, les variables restent NULL
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_jobtitle_en_lookup = NULL, v_jobtitle_fr_lookup = NULL; 

    -- Initialisation des colonnes de traduction avec la valeur saisie (sécurité par défaut)
    SET NEW.jobtitle_FR = NEW.jobtitle;
    SET NEW.jobtitle_EN = NEW.jobtitle;

    -- *** DÉBUT LOGIQUE DE TRADUCTION ***

    -- Cas 1 : La langue saisie est le français (FR)
    IF NEW.lg_iso2 = 'FR' THEN
        
        -- Recherche de l'équivalent EN
        SELECT jobtitle_EN
        INTO v_jobtitle_en_lookup
        FROM appli_vw_jobtitle_EN_FR
        WHERE jobtitle_FR = NEW.jobtitle
        LIMIT 1;

        -- Mise à jour de la colonne EN si une traduction est trouvée
        SET NEW.jobtitle_EN = COALESCE(v_jobtitle_en_lookup, NEW.jobtitle);

    -- Cas 2 : La langue saisie est l'anglais (EN)
    ELSEIF NEW.lg_iso2 = 'EN' THEN
        
        -- Recherche de l'équivalent FR
        SELECT jobtitle_FR
        INTO v_jobtitle_fr_lookup
        FROM appli_vw_jobtitle_EN_FR
        WHERE jobtitle_EN = NEW.jobtitle 
        LIMIT 1;

        -- Mise à jour de la colonne FR si une traduction est trouvée
        SET NEW.jobtitle_FR = COALESCE(v_jobtitle_fr_lookup, NEW.jobtitle);
        
        -- NEW.jobtitle_EN conserve la valeur saisie (déjà fait par l'initialisation)

    -- Cas 3 (ELSE) : Toute autre langue (lg_iso2 est NULL ou autre)
    -- Les colonnes NEW.jobtitle_FR et NEW.jobtitle_EN conservent la valeur saisie
    -- grâce à l'initialisation faite au début. Pas besoin de code supplémentaire ici.
    
    END IF; -- Cette ligne est CRUCIALE et doit être présente.

    -- NEW.jobtitle conserve la valeur d'entrée.

END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `appli_year_recruiters_bi` BEFORE INSERT ON `appli_year_recruiters` FOR EACH ROW BEGIN
  -- Déclaration de la variable locale pour stocker le résultat de la recherche EN
  DECLARE v_jobtitle_en_lookup VARCHAR(255) DEFAULT NULL;
  
  -- Gestionnaire d'erreur : Si la requête ne trouve rien, la variable reste NULL et le trigger continue.
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_jobtitle_en_lookup = NULL; 

  -- Cas 1 : Si la langue est française (FR)
  -- On utilise NEW.jobtitle (valeur FR) pour chercher l'équivalent EN dans la vue.
  IF NEW.lg_iso2 = 'FR' THEN
    
    -- Recherche de l'équivalent EN
    SELECT jobtitle_EN
    INTO v_jobtitle_en_lookup
    FROM appli_vw_jobtitle_EN_FR
    WHERE jobtitle_FR = NEW.jobtitle
    LIMIT 1;

    -- Si une traduction a été trouvée
    IF v_jobtitle_en_lookup IS NOT NULL THEN
      -- On met l'équivalent EN dans la colonne cible
      SET NEW.jobtitle_en = v_jobtitle_en_lookup;
    ELSE
      -- Si aucune traduction n'est trouvée, on utilise la valeur saisie (FR) par défaut dans jobtitle_en
      SET NEW.jobtitle_en = NEW.jobtitle; 
    END IF;

  -- Cas 2 : Si la langue est anglaise (EN) ou toute autre langue
  -- On met simplement la valeur saisie dans jobtitle_en.
  ELSE 
    -- On s'assure que la colonne cible jobtitle_en est bien renseignée avec la valeur d'entrée
    SET NEW.jobtitle_en = NEW.jobtitle;
    
  END IF;
  
END;;
DELIMITER ;


DELIMITER ;;
CREATE TRIGGER `appli_year_recruiters_bu` BEFORE UPDATE ON `appli_year_recruiters` FOR EACH ROW BEGIN
  -- Déclaration de la variable locale pour stocker le résultat de la recherche EN
  DECLARE v_jobtitle_en_lookup VARCHAR(255) DEFAULT NULL;
  
  -- Gestionnaire d'erreur : Si la requête ne trouve rien, la variable reste NULL et le trigger continue.
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_jobtitle_en_lookup = NULL; 

  -- Cas 1 : Si la langue est française (FR)
  -- On utilise NEW.jobtitle (valeur FR) pour chercher l'équivalent EN dans la vue.
  IF NEW.lg_iso2 = 'FR' THEN
    
    -- Recherche de l'équivalent EN
    SELECT jobtitle_EN
    INTO v_jobtitle_en_lookup
    FROM appli_vw_jobtitle_EN_FR
    WHERE jobtitle_FR = NEW.jobtitle
    LIMIT 1;

    -- Si une traduction a été trouvée
    IF v_jobtitle_en_lookup IS NOT NULL THEN
      -- On met l'équivalent EN dans la colonne cible
      SET NEW.jobtitle_en = v_jobtitle_en_lookup;
    ELSE
      -- Si aucune traduction n'est trouvée, on utilise la valeur saisie (FR) par défaut dans jobtitle_en
      SET NEW.jobtitle_en = NEW.jobtitle; 
    END IF;

  -- Cas 2 : Si la langue est anglaise (EN) ou toute autre langue
  -- On met simplement la valeur saisie dans jobtitle_en.
  ELSE 
    -- On s'assure que la colonne cible jobtitle_en est bien renseignée avec la valeur d'entrée
    SET NEW.jobtitle_en = NEW.jobtitle;
    
  END IF;
  
END;;
DELIMITER ;


