import { observer } from 'mobx-react';
import React, { useEffect, useState } from 'react';
import { getRefs } from '../../listes/commonAGGridFunctions';
import AbstractPopinEditor from '../common/AbstractPopinEditor';
import EipEditor from './EipEditor';

/**
 * Composant d'édition d'un EIP en pop-in.
 *
 * @component
 * @param {import('../../../../jsdoc/types').ContexteAgGrid} props.context - Le contexte d'affichage de la liste
 * @param {string} props.eip - L'EIP à éditer, sous forme d'objet de type {domaineId: ..., filiereId: ..., nfId: ...}
 * @param {function} props.setEip - Setter pour modifier la valeur de l'EIP
 * @param {string} props.message - Message d'introduction à afficher
 *
 * @param {boolean} props.isOpen - Etat d'ouverture de la pop-in
 * @param {boolean} props.setIsOpen - Mise à jour de l'état d'ouverture de la pop-in
 * @example
 * return (
 * <EipEditor />
 * )
 */
const EipPopinEditor = observer((props) => {
    const [eip, setEip] = useState(props.eip || {});

    // MAJ de l'EIP
    useEffect(() => {
        // console.log('EipPopinEditor props.eip update', props);
        setEip(props.eip || {});
    }, [props.eip]);

    // Callback de validation (= prise en compte) de la saisie
    const validationSaisie = () => {
        //  MAJ de l'EIP uniquement s'il a été modifié
        if (JSON.stringify(props.eip) !== JSON.stringify(eip)) {
            props.setEip({ ...eip });
        }
    };

    // Callback de vérification de validité de l'EIP saisi
    const isEipValid = () => {
        return (
            eip && // l'EIP existe
            eip.domaineId && // Il y a un domaine
            (eip.filiereId || !getRefs(props)?.filieres?.filter((f) => f.domaineId == eip.domaineId)?.length) && // Il y a une filière sauf si le domaine n'en contient pas
            eip.nfId // Il y a un NF
        );
    };

    return (
        <AbstractPopinEditor
            titre={props.titre}
            eip={props.eip}
            className="EipPopinEditor"
            isOpen={props.isOpen}
            setIsOpen={props.setIsOpen}
            onValidate={validationSaisie}
            conditionValidation={isEipValid}
            message={props.message}
        >
            <EipEditor titre="" context={props.context} eip={eip} setEip={setEip} />
        </AbstractPopinEditor>
    );
});

export default EipPopinEditor;
