import axios from 'axios';
import qs from 'qs';
import { TAUX_ARMEMENT_FE } from '../constantes/constantes';

/**
 * Classe effectuant les opérations de chargement des données sur les indicateurs, via l'API REST.
 *
 * @class
 */
class IndicateursManager {
    //
    static INDICATEURS_ENDPOINT = 'reporting';

    /**
     * Constructeur
     * @constructor
     */
    constructor() {}

    /**
     * Retourne une url pour récupérer les données filtrées
     *
     * @param {*} params - Paramètres de récupération des données filtrées
     * @returns {object} - Données filtrées
     */
    async fetchFiltresResults(params = {}) {
        const url = '/api/' + IndicateursManager.INDICATEURS_ENDPOINT + '/';

        const categorieFilters = [];
        params.categorie.forEach((c) => categorieFilters.push(c.value));
        const nfFilters = [];
        params.nf.forEach((nf) => nfFilters.push(nf.value));
        const domaineFilters = [];
        params.d_code.forEach((d) => domaineFilters.push(d.value));
        const filiereFilters = [];
        params.f_code.forEach((f) => filiereFilters.push(f.value));

        const baseParams = {
            type: params.type,
            sv_id: params.sv_id,
            d_code: domaineFilters,
            f_code: filiereFilters,
            categorie: categorieFilters,
            nf: nfFilters
        };

        const feSelected = [];
        if (params.type === TAUX_ARMEMENT_FE) {
            params.fe_id.forEach((fe) => feSelected.push(fe.value));
        }

        const tauxArmementParams = { ...baseParams, fe_id: feSelected };
        const suiviGestionnaireParams = { ...baseParams, vue: params.vue };

        return axios.get(url, {
            params: params.type === TAUX_ARMEMENT_FE ? tauxArmementParams : suiviGestionnaireParams,
            paramsSerializer: (params) => {
                return qs.stringify(params, { arrayFormat: 'repeat' });
            }
        });
    }
}

export default IndicateursManager;
