/**
 * Constantes utilisées dans le frontend.
 */

import { createConstantsFrom, deepFreeze } from '../helpers/objects';

/**
 * Constantes pour les profils
 * @type {import('../jsdoc/types').TypeProfils}
 */
export const PROFILS = createConstantsFrom(['BVT', 'FILIERE', 'HME', 'ITD', 'PCP', 'PCP_ACTUEL', 'PCP_FUTUR', 'SUPER']);

/**
 * Constantes pour les liens de navigation
 * @type {import('../jsdoc/types').TypeLiensNavigation}
 */
export const NAVIGATION = deepFreeze({
    GESTION_DECISIONS: '/gestionDecision',
    INDICATEURS: '/indicateurs',
    PERIMETRE: '/gestionPerimetre'
});

/**
 * Constantes couramment utilisées (listes, groupes de marque)
 */
export const ADMINISTRES = 'ADMINISTRES';
export const POSTES = 'POSTES';
export const ADMINISTRES_POSTES = 'ADMINISTRES_POSTES';
export const AFFECTATIONS = 'AFFECTATIONS';

/**
 * Constantes pour les indicateurs
 */
export const TAUX_ARMEMENT_FE = 'TAUX_ARMEMENT_FE';
export const SUIVI_PAM_GESTIONNAIRE = 'SUIVI_PAM_GESTIONNAIRE';

/**
 * Constantes pour les filtres des indicateurs
 */
export const CATEGORIES = 'CATEGORIES';
export const DOMAINES = 'DOMAINES';
export const FILIERES = 'FILIERES';
export const NF = 'NF';

/**
 * Catégories de militaires
 */
export const MILITAIRES_DU_RANG = 'Militaires du rang';
export const SOUS_OFFICIERS = 'Sous-officiers';
export const OFFICIERS_SUBALTERNES = 'Officiers subalternes';
export const OFFICIERS_SUPERIEURS = 'Officiers supérieurs';

/**
 * Navigation
 */
export const GLOBAL = 'GLOBAL';
export const PERIMETRE = 'PERIMETRE';
export const DECISION = 'DECISION';

/**
 * Constantes pour une partie des statuts de décisions
 * @type {import('../jsdoc/types').TypeDecisions}
 */
export const DECISIONS = deepFreeze({
    AUCUNE: '',
    ...createConstantsFrom(['PROPOSITION_FE', 'PREPOSITIONNE', 'POSITIONNE', 'OMI_EN_COURS', 'OMI_ACTIVE'])
});

/**
 * Constantes pour les statuts de calculs
 * @type {import('../jsdoc/types').TypeStatutsCalcul}
 */
export const STATUTS_CALCUL = createConstantsFrom(['AUCUN', 'EN_ATTENTE', 'EN_ATTENTE_ARRET', 'EN_COURS', 'TERMINE', 'TERMINE_DE_FORCE', 'ERREUR','ERREUR_ADMINISTRE','ERREUR_POSTE']);

export const CALCUL_TIMEOUT_DELAY = 60 * 60000; //1H en millisecondes

/**
 * Constantes pour les marques
 */
export const MARQUES_SEPARATEUR = ',';

/**
 * Constantes pour les compétences
 */
export const COMPETENCES_SEPARATEUR = ',';
export const COMPETENCES_ADMINISTRES_MAX_ITEMS = 10;
export const COMPETENCES_POSTES_MAX_ITEMS = 3;

/**
 * Constantes pour les zones georgraphique SHM
 */

export const ZONES_SEPARATEUR = ',';
export const ZONE_GEO_SHM_ADMINISTRES_MAX_ITEMS = 4;

/**
 * Constantes pour les départements souhaités
 */
export const DEPARTEMENTS_SOUHAITES_SEPARATEUR = ',';
export const DEPARTEMENTS_SOUHAITES_MAX_ITEMS = 3;

/**
 * Constantes pour les affectations
 */
export const LISTE_TYPE_DECISIONS = 'DECISIONS';
export const LISTE_TYPE_SUGGESTIONS = 'SUGGESTIONS';

/**
 * Constantes pour les décisions
 */
export const DIRECT_COMMISSIONNE_SEPARATEUR = ',';
export const DIRECT_COMMISSIONNE_MAX_ITEMS = 2;

/**
 * Constantes pour les touches de clavier
 */
export const KEY_TAB = 9;
export const KEY_LEFT = 37;
export const KEY_UP = 38;
export const KEY_RIGHT = 39;
export const KEY_DOWN = 40;
export const KEY_PAGE_UP = 33;
export const KEY_PAGE_DOWN = 34;
export const KEY_PAGE_HOME = 36;
export const KEY_PAGE_END = 35;

export const KEY_BACKSPACE = 8;
export const KEY_DELETE = 46;
export const KEY_F2 = 113;
export const KEY_ENTER = 13;

export const AGGRID_NAVIGATION_KEYS = [
    KEY_TAB,
    KEY_LEFT,
    KEY_UP,
    KEY_RIGHT,
    KEY_DOWN,
    KEY_PAGE_UP,
    KEY_PAGE_DOWN,
    KEY_PAGE_HOME,
    KEY_PAGE_END,
    KEY_ENTER
];

/**
 * Constantes pour les PAMs
 */
export const PAM_A = 'PAM A';
export const PAM_SUIVANT = 'PAM A+1';

/**
 * Constantes pour les mots interdits (RGPD)
 */
export const BANNED_WORDS = ["Éthanol" , "état de grâce" , "abandon" , "aboli" , "accident" , "accouchement" , "achat" , "achats" , "Adoration" , "adultère" , "Affectation" , "agression" , "ailleux" , "alcool" , "Alliance" , "ami" , "amies" , "amies" , "amis" , "Amour" , "Amphétamines" , "Anathème" , "Androgyne" , "Angélologie" , "Angélophanie" , "animaux" , "anorexie" , "anti" , "anticomanie" , "Anxiolytiques" , "Apathie" , "argent" , "argent" , "arrêt" , "Ascèse" , "Asexualité" , "asiatique" , "Assignation" , "Astreinte" , "Attrition" , "Audience" , "Baptême" , "Barreau" , "beau–père" , "béni" , "bigamie" , "biologique" , "Bisexualité" , "blanc" , "blessure" , "Bondieuserie" , "bouddhiste" , "célibertaire" , "cancer" , "Cannabis" , "catholique" , "centre" , "Chevecier" , "Cisgenre" , "Cocaïne" , "colocataire" , "colocation" , "Coming out" , "Compétence" , "compte" , "compulsif" , "conciliation" , "Conciliation" , "Concordisme" , "concubinage" , "Confession de foi" , "Congrès" , "conjoint" , "conjugal" , "conjugal" , "conscience" , "Consécration" , "consentement" , "Consolatrice des Affligés" , "corruption" , "coup" , "couple" , "covid" , "crime" , "crise" , "croyant" , "croyant" , "Daimoku" , "décès" , "décès" , "Défendeur" , "Délibéré" , "délit" , "Demandeur" , "demi–frère" , "demi–part" , "demi–sœur" , "Dénomination" , "départ" , "dépendante" , "Dépensa" , "détentions" , "Dettes" , "diacre" , "dieu" , "Disciple" , "dissolution" , "divorcer" , "divortialité" , "Dommages et intérêts" , "Don" , "dot" , "drogue" , "église" , "élu" , "enfant" , "enquête" , "épouse" , "époux" , "Eulogie" , "Exécration" , "Exégèse" , "Exégèse canonique" , "Exotérisme" , "Exploit d'huissier" , "Extrait" , "Ex–voto" , "familial" , "familial" , "féminin" , "femme" , "Fidèle" , "Foi" , "Fol–en–Christ" , "Folle" , "Formule exécutoire" , "Frais" , "Frère" , "frère" , "frères" , "gai" , "Gay" , "Genre" , "grâce" , "Greffe" , "gros" , "grossesse" , "guerre" , "handicap" , "hépathique" , "Hérésiarque" , "Hérésie" , "Hétérosexuel" , "Heure Sainte" , "Hiérophanie" , "Histoire" , "homme" , "homo" , "Hydrocarbures" , "Hypnotiques" , "Iconoclasme" , "Iconodulie" , "Idolâtrie" , "imam" , "immobilier" , "Impiété" , "inconscient" , "inhalation" , "instance" , "intégrisme" , "intégriste" , "internet" , "Intersexe" , "jésus" , "jeux" , "juif" , "Jurisprudence" , "Lesbienne" , "LGBT" , "liquidation" , "Litige" , "Louange" , "Mahomet" , "Maison" , "maison" , "malentendu" , "malformation" , "marge d'erreur" , "mari" , "mari" , "mariage" , "masturbation" , "maternité" , "mentale" , "Metatron" , "militant" , "Mimétisme" , "Mise en demeure" , "Missionnaire" , "Modéré" , "monogamie" , "monoparentale" , "Moratoire" , "mort" , "mosquée" , "musulman" , "mutilation" , "naissance" , "neveu" , "neveux" , "nièce" , "nièces" , "noce" , "noir" , "Nomina sacra" , "Notification " , "Numen" , "obèse" , "Obligation" , "occident" , "omnium" , "OMS" , "opération" , "opiacés" , "Opiacés" , "Ordonnance" , "ordre" , "Ordres majeurs" , "Ordres mineurs" , "orient" , "Orientation sexuelle" , "orpheline" , "Orthodoxe" , "Orthodoxie" , "Pantokrator" , "Paradis" , "Parèdre" , "parent" , "parent" , "parents" , "paternité" , "peine" , "  Personne morale" , "Peuple" , "photo" , "physique" , "Piété" , "pieux" , "placement" , "Pneumatologie" , "politique" , "polygamie" , "pornographie" , "post" , "pratiquant" , "préjudice" , "Préjudice" , "Prémices" , "Prière" , "prison" , "procédure" , "Produits" , "Profanation" , "Profane" , "Profession de foi" , "prononcé" , "Prophète" , "Prosélytisme" , "Providence" , "psychologique" , "Psychostasie" , "Queer" , "recomposé" , "Réconciliation" , "regard" , "Réhabilitation" , "relationnel" , "religieux" , "Religion" , "remariage" , "répudiation" , "réquisition" , "Risque" , "rite" , "rŒte" , "ruine" , "sacre" , "sacré" , "sacrée" , "Saint–Esprit" , "sale" , "séparation" , "Service" , "Sexe" , "sida" , "Signification" , "situation" , "smartphone" , "social" , "sœur" , "sœurs" , "solas" , "Sommation" , "sourd" , "soutien" , "Spéculation" , "spirituel" , "stigmatisation" , "surcharge" , "syndical" , "Syneisaktisme" , "Tasbih" , "taux" , "Témoins" , "temple" , "Théophanie" , "Tonalli" , "toxicomane" , "toxicomanie" , "Trans" , "traumatique" , "traumatisme" , "vente" , "veuf" , "vidéo" , "viduit" , "vih" , "viol" , "virus" , "virus" , "vol" , "vulnérable"];