/**
 * @component
 */

import dayjs from 'dayjs';
import { COMPETENCES_SEPARATEUR, MARQUES_SEPARATEUR, DEPARTEMENTS_SOUHAITES_SEPARATEUR } from '../../../constantes/constantes';
import i18n from '../../../i18n/i18n';
import { getDepartements } from '../../Commun/listes/helpers/business-data-helpers';

/**
 * Adapte les données d'UN administré reçues du backend, pour l'affichage dans la fiche détaillée :
 * - Mapping des champs
 * - Ajout de valeur par défaut pour les données manquantes (généralement 'A récupérer BDD')
 * - Ajout de certains champs calculés (ex : identite_age, service_temps)
 *
 * @param {Object} donneesReference - Données de référence
 * @param {<Object>} a - Objet contenant les données issues du backend pour un administré
 * @returns {<Object>} Objet normalisé et complété, pour affichage dans la fiche détaillée
 */
export function mapDataAdministreForFicheDetaillee(donneesReference, a) {
    const now = dayjs();
    const anneeCourante = now.toDate().getUTCFullYear();
    const CHAMP_VIDE = i18n.global.donnees.vide;

    //console.log('administré detaillé', a);

    return {
        // Entête
        entete_identiteMatricule: a.a_id_sap || CHAMP_VIDE,
        entete_identiteGrade: a.grade || CHAMP_VIDE,
        entete_identiteNom: a.a_nom || CHAMP_VIDE,
        entete_identitePrenom: a.a_prenom || CHAMP_VIDE,
        entete_identiteDateNaissance: a.a_date_naissance ? dayjs(a.a_date_naissance).format('DD/MM/YYYY') : CHAMP_VIDE,
        entete_identiteAge: a.a_date_naissance ? anneeCourante - new Date(a.a_date_naissance).getUTCFullYear() : CHAMP_VIDE,
        entete_identiteSexe: a.a_sexe || CHAMP_VIDE,
        entete_idDef: a.a_id_def || CHAMP_VIDE,
        entete_dateGrade: a.a_grade_date_debut ? dayjs(a.a_grade_date_debut).format('DD/MM/YYYY') : CHAMP_VIDE, //TODO: champ a_date_grade manquant
        entete_tempsDateGrade: a.a_grade_date_debut ? dayjs(now).diff(a.a_grade_date_debut, 'year') : CHAMP_VIDE, //TODO: champ a_date_grade manquant
        entete_dateEntreeFE: a.a_date_arrivee_fe ? dayjs(a.a_date_arrivee_fe).format('DD/MM/YYYY') : CHAMP_VIDE,
        entete_tempsDateEntreeFE: a.a_date_arrivee_fe ? dayjs(now).diff(a.a_date_arrivee_fe, 'year') : CHAMP_VIDE,
        entete_dateInterruptionService: a.a_interruption_service, //? dayjs(a.a_interruption_service).format('DD/MM/YYYY') : CHAMP_VIDE, //TODO champ a_interruption_service au mauvais format (ex :"0A 0M 0J")
        entete_dateEntreeService: a.a_date_entree_service ? dayjs(a.a_date_entree_service).format('DD/MM/YYYY') : CHAMP_VIDE,
        entete_tempsEntreeService: a.a_date_entree_service ? dayjs(now).diff(a.a_date_entree_service, 'year') : CHAMP_VIDE,
        entete_dateRDC: a.a_date_rdc ? dayjs(a.a_date_rdc).format('DD/MM/YYYY') : CHAMP_VIDE,
        entete_tempsRDC: a.a_date_rdc ? dayjs(a.a_date_rdc).diff(now, 'year') : CHAMP_VIDE,
        entete_dateDernierACR: a.a_date_dernier_acr ? dayjs(a.a_date_dernier_acr).format('DD/MM/YYYY') : CHAMP_VIDE,
        entete_tempsDernierACR: a.a_date_dernier_acr ? dayjs(now).diff(a.a_date_dernier_acr, 'year') : CHAMP_VIDE,
        entete_arme: a.a_arme || CHAMP_VIDE,
        entete_recrutement: a.a_rg_origine_recrutement || CHAMP_VIDE,
        entete_corpsStatut: a.a_pos_statuaire || CHAMP_VIDE,
        entete_competences: a.a_liste_id_competences ? a.a_liste_id_competences :[], // liste des compétences du soldat
        entete_emploiOccupe: a.a_fonction || CHAMP_VIDE,
        entete_EIP: a.a_eip_fiche_detaille || CHAMP_VIDE,
        entete_EIS: a.a_eis || CHAMP_VIDE,
        entete_BG: a.a_bg || CHAMP_VIDE, // TODO champ a_bg manquant
        entete_PLSGBMax: a.a_pls_gb_max || CHAMP_VIDE,
        entete_marqueur_pn: a.a_marqueur_pn || CHAMP_VIDE,
        entete_NID : a.a_id_def || CHAMP_VIDE,

        // FORMOB_FOREMP
        formob_millesime: a.fmob ? a.fmob.fmob_millesime : anneeCourante, // liste des 5 fonctions emploi
        formob_cinqFonctionsEmploi: a.fmob
            ? [a.fmob.fmob_fonction_1, a.fmob.fmob_fonction_2, a.fmob.fmob_fonction_3, a.fmob.fmob_fonction_4, a.fmob.fmob_fonction_5]
            : [], // liste des 5 fonctions emploi
        formob_cinqCommunesEmploi: a.fmob
            ? [a.fmob.fmob_commune_1, a.fmob.fmob_commune_2, a.fmob.fmob_commune_3, a.fmob.fmob_commune_4, a.fmob.fmob_commune_5]
            : [], // liste des 5 communes emploi
        formob_cinqPriorisationsEmploi: a.fmob
            ? [a.fmob.fmob_prio_1, a.fmob.fmob_prio_2, a.fmob.fmob_prio_3, a.fmob.fmob_prio_4, a.fmob.fmob_prio_5]
            : [], // liste des 5 priorisations emploi
        formob_departementsSouhaites: a.a_liste_depts_souhaites
            ? getDepartements(donneesReference, a.a_liste_depts_souhaites.split(DEPARTEMENTS_SOUHAITES_SEPARATEUR)).map(
                  (d) => d.code + (d.code != d.libelle ? ' (' + d.libelle + ')' : '')
              )
            : [], // liste des départements souhaités

        formob_commentaireDRHAT: a.fmob ? a.fmob.fmob_commentaire_ac : CHAMP_VIDE, //TODO : non retrouvé dans la db formob
        formob_CIATSoldat: a.fmob ? (a.fmob.fmob_mobilite_centre_interet_adt ? 'Oui' : 'Non') : CHAMP_VIDE,
        formob_intBassinSoldat: a.fmob ? (a.fmob.fmob_mobilite_bassin_interne ? 'Oui' : 'Non') : CHAMP_VIDE,
        formob_extBassinSoldat: a.fmob ? (a.fmob.fmob_mobilite_bassin_externe ? 'Oui' : 'Non') : CHAMP_VIDE,
        formob_TSHMSoldat: a.fmob ? (a.fmob.fmob_mobilite_hors_metropole ? 'Oui' : 'Non') : CHAMP_VIDE, //TODO: TSHM contient hors metropole ?
        formob_specialiteSoldat: a.fmob ? (a.fmob.fmob_mobilite_dans_specialite ? 'Oui' : 'Non') : CHAMP_VIDE, 
        formob_recParticulierSoldat: a.fmob ? (a.fmob.fmob_mobilite_recrutement_particulier_administre ? 'Oui' : 'Non') : CHAMP_VIDE,
        //TODO: Commandement
        // la partie du FORMOB en lien avec l'avis du commandement
        formob_specialiteCommandemant: a.fmob ? (a.fmob.fmob_avis_cdc_mobilite_specialite ? 'Oui' : 'Non') : CHAMP_VIDE,
        formob_CIATCommandemant: a.fmob ? (a.fmob.fmob_avis_cdc_mobilite_centre_interet ? 'Oui' : 'Non') : CHAMP_VIDE,
        formob_intBassinCommandemant: a.fmob ? (a.fmob.fmob_avis_cdc_mobilite_interne ? 'Oui' : 'Non') : CHAMP_VIDE,
        formob_extBassinCommandemant: a.fmob ? (a.fmob.fmob_avis_cdc_mobilite_externe ? 'Oui' : 'Non') : CHAMP_VIDE,
        formob_TSHMCommandemant: a.fmob ? (a.fmob.fmob_avis_cdc_mobilite_hors_metropole ? 'Oui' : 'Non') : CHAMP_VIDE,
        formob_recParticulierCommandemant: a.fmob ? (a.fmob.fmob_avis_cdc_mobilite_recrutement_particulier_admin ? 'Oui' : 'Non') : CHAMP_VIDE,
        formob_CDCFAVMutationCommandemant: a.fmob ? (a.fmob.fmob_avis_cdc_mutation_administre ? 'Oui' : 'Non') : CHAMP_VIDE,
        formob_remarqueInteresse: a.fmob ? a.fmob.fmob_remarques_eventuelles_administres : CHAMP_VIDE,
        formob_avisCommandemant: a.fmob ? a.fmob.fmob_avis_commandant_formation : CHAMP_VIDE,
        formob_avisMutabilite: a.fmob ? a.fmob.fmob_avis_mutabilite : CHAMP_VIDE,
        formob_OBSouPrevisionAffectation: a.fmob ? a.fmob.fmob_obs : CHAMP_VIDE,
        formob_credoFEFuture: a.fmob ? a.fmob.fmob_fe_future : CHAMP_VIDE, // TODO: Comment on obtient cette donnée ?
        formob_marques: a.a_liste_id_marques ? a.a_liste_id_marques.split(MARQUES_SEPARATEUR) : [],

        // Affectations/Fonctions
        affectationsfonctions_credo: a.a_credo_fe || CHAMP_VIDE,
        affectationsfonctions_garnison: a.fe ? a.fe.fe_garnison_lieu : CHAMP_VIDE,
        //TODO THomas, on en a 9
        affectations_historique: [
            a.a_affectation1,
            a.a_affectation2,
            a.a_affectation3,
            a.a_affectation4,
            a.a_affectation5,
            a.a_affectation6,
            a.a_affectation7,
            a.a_affectation8,
            a.a_affectation9
        ] || [CHAMP_VIDE], // liste des 10 affectations
        affectations_date_historique: [
            a.a_date_affectation1,
            a.a_date_affectation2,
            a.a_date_affectation3,
            a.a_date_affectation4,
            a.a_date_affectation5,
            a.a_date_affectation6,
            a.a_date_affectation7,
            a.a_date_affectation8,
            a.a_date_affectation9
        ] || [CHAMP_VIDE], // liste des 10 date affectations
        fonctions_historique: [
            a.a_fonction1,
            a.a_fonction2,
            a.a_fonction3,
            a.a_fonction4,
            a.a_fonction5,
            a.a_fonction6,
            a.a_fonction7,
            a.a_fonction8,
            a.a_fonction9
        ] || [CHAMP_VIDE], // liste des 10 fonctions
        fonctions_date_historique: [
            a.a_date_fonction1,
            a.a_date_fonction2,
            a.a_date_fonction3,
            a.a_date_fonction4,
            a.a_date_fonction5,
            a.a_date_fonction6,
            a.a_date_fonction7,
            a.a_date_fonction8,
            a.a_date_fonction9
        ] || [CHAMP_VIDE], // liste des 10 date fonctions
        affectationsfonctions_datePositionStatuaire: a.a_date_pos_statuaire ? dayjs(a.a_date_pos_statuaire).format('DD/MM/YYYY') : CHAMP_VIDE,

        // Famille
        famille_situation: a.a_situation_fam || CHAMP_VIDE,
        famille_date: a.a_date_mariage ? dayjs(a.a_date_mariage).format('DD/MM/YYYY') : CHAMP_VIDE,
        famille_nbEnfants: a.a_nombre_enfants.toString() || CHAMP_VIDE,
        famille_infoEnfants: a.a_enfants || CHAMP_VIDE,
        famille_professionConjoint: a.a_profession_conjoint || CHAMP_VIDE,
        famille_sexeConjoint: a.a_sexe_conjoint || CHAMP_VIDE,
        famille_gradeConjoint: a.conjoint ? a.conjoint.grade : CHAMP_VIDE,
        famille_nomConjoint: a.conjoint ? a.conjoint.a_nom : CHAMP_VIDE,
        famille_prenomConjoint: a.conjoint ? a.conjoint.a_prenom : CHAMP_VIDE,
        famille_SAPConjoint: a.a_sap_conjoint || CHAMP_VIDE,
        famille_NIDConjoint: a.conjoint ? a.conjoint.a_id_def : CHAMP_VIDE,
        famille_credoFEConjoint: a.conjoint ? a.conjoint.a_credo_fe : CHAMP_VIDE,
        famille_FEConjoint: a.conjoint ? (a.conjoint.fe ? a.conjoint.fe.fe_libelle : CHAMP_VIDE) : CHAMP_VIDE,
        famille_garnisonConjoint: a.conjoint ? (a.conjoint.fe ? a.conjoint.fe.fe_garnison_lieu : CHAMP_VIDE) : CHAMP_VIDE,
        famille_fmobeConjoint : a.conjoint ? a.conjoint.fmob_O_N : CHAMP_VIDE,

        // Diplomes
        diplomes_diplMiliLePlusHaut: a.a_diplome_hl || CHAMP_VIDE,
        diplomes_dernierDiplMili: a.a_dernier_diplome || CHAMP_VIDE,
        diplomes_dixDerniersDiplMili: [
            a.a_diplome_1,
            a.a_diplome_2,
            a.a_diplome_3,
            a.a_diplome_4,
            a.a_diplome_5,
            a.a_diplome_6,
            a.a_diplome_7,
            a.a_diplome_8,
            a.a_diplome_9,
            a.a_diplome_10
        ] || [CHAMP_VIDE], // liste des 10 derniers diplômes
        diplomes_dixDatesDerniersDipl: [
            a.a_diplome_1_date,
            a.a_diplome_2_date,
            a.a_diplome_3_date,
            a.a_diplome_4_date,
            a.a_diplome_5_date,
            a.a_diplome_6_date,
            a.a_diplome_7_date,
            a.a_diplome_8_date,
            a.a_diplome_9_date,
            a.a_diplome_10_date
        ] || [CHAMP_VIDE], // liste des 10 dates des 10 derniers diplômes
        diplomes_dixNotesDerniersDipl: [
            a.a_diplome_1_note,
            a.a_diplome_2_note,
            a.a_diplome_3_note,
            a.a_diplome_4_note,
            a.a_diplome_5_note,
            a.a_diplome_6_note,
            a.a_diplome_7_note,
            a.a_diplome_8_note,
            a.a_diplome_9_note,
            a.a_diplome_10_note
        ] || [CHAMP_VIDE], // liste des 10 notes des 10 derniers diplômes

        fud_dixDatesDebut: [
            a.a_fud_1_dd,
            a.a_fud_2_dd,
            a.a_fud_3_dd,
            a.a_fud_4_dd,
            a.a_fud_5_dd,
            a.a_fud_6_dd,
            a.a_fud_7_dd,
            a.a_fud_8_dd,
            a.a_fud_9_dd,
            a.a_fud_10_dd
        ] || [CHAMP_VIDE], // liste des 10 derniers diplômes
        fud_dixDatesFin: [
            a.a_fud_1_df,
            a.a_fud_2_df,
            a.a_fud_3_df,
            a.a_fud_4_df,
            a.a_fud_5_df,
            a.a_fud_6_df,
            a.a_fud_7_df,
            a.a_fud_8_df,
            a.a_fud_9_df,
            a.a_fud_10_df
        ] || [CHAMP_VIDE], // liste des 10 dates des 10 derniers diplômes
        fud_dixLibelle: [
            a.a_fud_1_l,
            a.a_fud_2_l,
            a.a_fud_3_l,
            a.a_fud_4_l,
            a.a_fud_5_l,
            a.a_fud_6_l,
            a.a_fud_7_l,
            a.a_fud_8_l,
            a.a_fud_9_l,
            a.a_fud_10_l
        ] || [CHAMP_VIDE] ,// liste des 10 notes des 10 derniers diplômes
        

        // Pour l'onglet Notation
        lien_en_service: a.a_lien_service || CHAMP_VIDE,
        
        anne_de_notation: [
            parseInt(a.no_annne_de_notation_A_1) || CHAMP_VIDE,
            parseInt(a.no_annne_de_notation_A_2) || CHAMP_VIDE,
            parseInt(a.no_annne_de_notation_A_3) || CHAMP_VIDE,
            parseInt(a.no_annne_de_notation_A_4) || CHAMP_VIDE,
            parseInt(a.no_annne_de_notation_A_5) || CHAMP_VIDE,
            parseInt(a.no_annne_de_notation_A_6) || CHAMP_VIDE,
        ] || [CHAMP_VIDE], // liste des 6 annees de notation

        a_iris: a.a_categorie == 'OFF' ? [
            a.no_nr_ou_iris_A_1 || CHAMP_VIDE,
            a.no_nr_ou_iris_A_2 || CHAMP_VIDE,
            a.no_nr_ou_iris_A_3 || CHAMP_VIDE,
            a.no_nr_ou_iris_A_4 || CHAMP_VIDE,
            a.no_nr_ou_iris_A_5 || CHAMP_VIDE,
            a.no_nr_ou_iris_A_6 || CHAMP_VIDE,
        ] || [CHAMP_VIDE] : [CHAMP_VIDE,CHAMP_VIDE,CHAMP_VIDE,CHAMP_VIDE,CHAMP_VIDE,CHAMP_VIDE], // liste des 6 NR/NGC

        a_iris_cumule: a.a_categorie == 'OFF' ? [
            a.no_rac_ou_iris_cumule_A_1 || CHAMP_VIDE,
            a.no_rac_ou_iris_cumule_A_2 || CHAMP_VIDE,
            a.no_rac_ou_iris_cumule_A_3 || CHAMP_VIDE,
            a.no_rac_ou_iris_cumule_A_4 || CHAMP_VIDE,
            a.no_rac_ou_iris_cumule_A_5 || CHAMP_VIDE,
            a.no_rac_ou_iris_cumule_A_6 || CHAMP_VIDE,
        ] || [CHAMP_VIDE] : [CHAMP_VIDE,CHAMP_VIDE,CHAMP_VIDE,CHAMP_VIDE,CHAMP_VIDE,CHAMP_VIDE], // liste des 6 NR/NGC


        a_ngc_cumule: a.a_categorie != 'OFF' ? [
            a.no_nr_ou_iris_A_1 || CHAMP_VIDE,
            a.no_nr_ou_iris_A_2 || CHAMP_VIDE,
            a.no_nr_ou_iris_A_3 || CHAMP_VIDE,
            a.no_nr_ou_iris_A_4 || CHAMP_VIDE,
            a.no_nr_ou_iris_A_5 || CHAMP_VIDE,
            a.no_nr_ou_iris_A_6 || CHAMP_VIDE,
        ] || [CHAMP_VIDE] : [CHAMP_VIDE,CHAMP_VIDE,CHAMP_VIDE,CHAMP_VIDE,CHAMP_VIDE,CHAMP_VIDE], // liste des 6 NR/NGC

        a_rac: a.a_categorie != 'OFF' ? [
            a.no_rac_ou_iris_cumule_A_1 || CHAMP_VIDE,
            a.no_rac_ou_iris_cumule_A_2 || CHAMP_VIDE,
            a.no_rac_ou_iris_cumule_A_3 || CHAMP_VIDE,
            a.no_rac_ou_iris_cumule_A_4 || CHAMP_VIDE,
            a.no_rac_ou_iris_cumule_A_5 || CHAMP_VIDE,
            a.no_rac_ou_iris_cumule_A_6 || CHAMP_VIDE,
        ] || [CHAMP_VIDE] : [CHAMP_VIDE,CHAMP_VIDE,CHAMP_VIDE,CHAMP_VIDE,CHAMP_VIDE,CHAMP_VIDE], // liste des 6 RAC

        a_rf_qsr: [
            a.no_rf_qsr_A_1 || CHAMP_VIDE,
            a.no_rf_qsr_A_2 || CHAMP_VIDE,
            a.no_rf_qsr_A_3 || CHAMP_VIDE,
            a.no_rf_qsr_A_4 || CHAMP_VIDE,
            a.no_rf_qsr_A_5 || CHAMP_VIDE,
            a.no_rf_qsr_A_6 || CHAMP_VIDE,
        ] || [CHAMP_VIDE], // liste des 160 RF/QCR

        a_aptitude_emploi_sup: [
            a.no_aptitude_emploie_sup_A_1 || CHAMP_VIDE,
            a.no_aptitude_emploie_sup_A_2 || CHAMP_VIDE,
            a.no_aptitude_emploie_sup_A_3 || CHAMP_VIDE,
            a.no_aptitude_emploie_sup_A_4 || CHAMP_VIDE,
            a.no_aptitude_emploie_sup_A_5 || CHAMP_VIDE,
            a.no_aptitude_emploie_sup_A_6 || CHAMP_VIDE,
        ] || [CHAMP_VIDE], // liste des 6 Apt resp / Emp

        a_potentiel_responsabilite_sup: [
            a.no_potentiel_responsabilite_sup_A_1 || CHAMP_VIDE,
            a.no_potentiel_responsabilite_sup_A_2 || CHAMP_VIDE,
            a.no_potentiel_responsabilite_sup_A_3 || CHAMP_VIDE,
            a.no_potentiel_responsabilite_sup_A_4 || CHAMP_VIDE,
            a.no_potentiel_responsabilite_sup_A_5 || CHAMP_VIDE,
            a.no_potentiel_responsabilite_sup_A_6 || CHAMP_VIDE,
        ] || [CHAMP_VIDE], // liste des 6 Potentiel Cat. Sup

        no_age_annees: [
            a.no_age_annees_A_1 || CHAMP_VIDE,
            a.no_age_annees_A_2 || CHAMP_VIDE,
            a.no_age_annees_A_3 || CHAMP_VIDE,
            a.no_age_annees_A_4 || CHAMP_VIDE,
            a.no_age_annees_A_5 || CHAMP_VIDE,
            a.no_age_annees_A_6 || CHAMP_VIDE,
        ] || [CHAMP_VIDE], // liste des 6 Age
    };
}
