import { observer } from 'mobx-react';
import React, { useContext, useEffect, useState } from 'react';
import useSWR from 'swr';
import { ADMINISTRES } from '../../../constantes/constantes';
import AppConfigStore, { AppConfigContext } from '../../../stores/AppConfigStore';
import { Chargement } from '../../Commun/Chargement';
import { Erreur } from '../../Commun/Erreur';
import { createGridContext } from '../../Commun/listes/gridContext';
import ListeGestionDecision from '../Commun/ListeGestionDecision';

/**
 * Composant permettant d'afficher une liste d'administrés à traiter pour la vue d'aide à la décision (volet de gauche).
 *
 * @component
 * @param {object} agGridConfigurationAdministres - Instance de la classe AGGridConfigurationAdministres à utiliser
 * @example
 * return (
 * <GestionDecisionListeAdministres />
 * )
 */

const GestionDecisionListeAdministres = observer((props) => {
    /** @type {AppConfigStore} */
    const appConfig = useContext(AppConfigContext);

    const [administresAdaptes, setAdministresAdaptes] = useState(undefined);
    const annee = appConfig.PAMSelectionne;
    const anneeA1 = appConfig.donneesReference.PAMByStatut.get('PAM A+1').pam_id;

    const params = { pageSize: 10000000, page: 1 }; 
    annee && (params.pam__in = annee);
    const administreSelectif = annee == anneeA1 ? appConfig.selectAdministreSelectifPamA1 
                                                : appConfig.selectAdministreSelectifPamA;

    administreSelectif && (params.adm__in=administreSelectif.join(','));
    const getKey = appConfig.managers.decisions.buildCallKey(appConfig.idsSousViviersSelectionnees[0], appConfig.vueDecision, params);
    const { data, error } = useSWR(getKey);

    useEffect(() => {
        // Mise à jour des données
        if (typeof data !== 'undefined') {
            setAdministresAdaptes(props.agGridConfigurationAdministres.adapteAdministres(data.results || []));
        } else {
            //TODO: error handling ici
            if (typeof error == 'undefined') {
                console.info('Chargement des données des administrés...');
            } else {
                console.error(error);
            }
        }
    }, [data, error]);

    useEffect(() => {
        // Lorsque les données ont été mises à jour, il faut mettre à jour aussi la sélection éventuelle
        if (administresAdaptes !== undefined && appConfig.hasSelectedAdministreDecision) {
            // On reconstruit la sélection
            const selectedId = appConfig.selectedAdministreDecision.id;
            const newSelection = administresAdaptes.find((a) => selectedId == a.id);
            appConfig.setSelectedAdministreDecision(newSelection);
        }
    }, [administresAdaptes]);

    /* Génération du paramétrage des groupes de colonnes et colonnes pour AG Grid */
    const administresFields = props.agGridConfigurationAdministres.buildAdministresColumnDefs([
        {
            groupId: 'identite',
            columns: [
                {
                    colId: 'identite_matricule',
                    override: { width: 90 }
                },
                {
                    colId: 'identite_grade',
                },
                {
                    colId: 'identite_nom',
                },
                {
                    colId: 'identite_prenom',
                },
                {
                    colId: 'identite_anciennete_grade',
                }
            ]
        },
        {
            groupId: 'competences_NonEditable',
            columns: [{ colId: 'competences_competences', override: { headerName: 'Compétences', width: 120 } }]
        },
        {
            groupId: 'EIPFutur_NonEditable',
            columns: [
                { colId: 'EIPFutur_domaine', override: { columnGroupShow: 'open' } },
                { colId: 'EIPFutur_filiere', override: { columnGroupShow: 'open' } },
                { colId: 'EIPFutur_NF', override: { columnGroupShow: 'open' } }
            ]
        },

        // {
        //     groupId: 'PAMEnCours_NonEditable',
        //     columns: ['PAMEnCours_avis']
        // },

        {
            groupId: 'decision_NonEditable',
            columns: [
                'PAMEnCours_avis',
                'decision_notesUtilisateur',
                'decision_ciat',
                'decision_specifique',
            ]
        }
    ]);

    return (
        <div className="d-flex flex-column h-100">
            {!data ? (
                error ? (
                    <Erreur />
                ) : (
                    <Chargement />
                )
            ) : (
                <ListeGestionDecision
                    columnDefs={administresFields}
                    data={administresAdaptes ?? []}
                    nbItems={data.count}
                    title="Administrés à traiter"
                    itemLabel="administré"
                    itemsLabel="administrés"
                    context={createGridContext(appConfig, ADMINISTRES)}
                />
            )}
        </div>
    );
});

export default GestionDecisionListeAdministres;
