<?php

namespace Modules\ProjetAchat\MenuContextuel;

use Helpers\Outil\MenuContextuel;
use Helpers\Outil\Roles;
use Helpers\Outil\Sql;
use Helpers\Trad\ITrad;
use Helpers\Trad\Trad;
use Skeleton\Router;

class GestionProjetMenuContextuel extends MenuContextuel
{
    /**
     * @var array<mixed> $droit
     */
    public $droit;
        
    public function __construct(\PDO $pdo, Router $router, ITrad $trad)
    {
        parent::__construct($pdo, $router, $trad);

        $this->droit = [
            'DOA_DOA_CM'    => Roles::droitsUtilisateur($this->pdo, 'DOA_DOA_CM', $_SESSION["Session_Login"]),
            'DOA_DOA_TT'    => Roles::droitsUtilisateur($this->pdo, 'DOA_DOA_TT', $_SESSION["Session_Login"]),
            'DOA_VIA_UO'    => Roles::droitsUtilisateur($this->pdo, 'DOA_VIA_UO', $_SESSION["Session_Login"]),
            'DOA_VIA_CT'    => Roles::droitsUtilisateur($this->pdo, 'DOA_VIA_CT', $_SESSION["Session_Login"]),
            'DOA_IMP_MO'    => Roles::droitsUtilisateur($this->pdo, 'DOA_VIA_CT', $_SESSION["Session_Login"]),
            'CreatMod_DOA'  => $_SESSION['CreatMod_DOA'],
            'DOA_MACT'      => Roles::droitsUtilisateur($this->pdo, 'DOA_MACT', $_SESSION["Session_Login"]),
            'DOA_AJ_REP'    => Roles::droitsUtilisateur($this->pdo, 'DOA_AJ_REP', $_SESSION["Session_Login"]),
            'HA_AO_CMV'     => Roles::droitsUtilisateur($this->pdo, 'HA_AO_CMV', $_SESSION['Session_Login']),
            'HA_AO_ADM'     => Roles::droitsUtilisateur($this->pdo, 'HA_AO_ADM', $_SESSION['Session_Login']),
        ];
    }

    /**
     * @param array<mixed> $projet
     * @return array<mixed>
     */
    public function generate($projet, bool $gestion = true)
    {
        $menuContextuel = [];

        $droitAcces = ($this->droit['DOA_DOA_CM'] && $projet['PROPRIETAIRE'] == $_SESSION["Session_Login"]) || $this->droit['DOA_DOA_TT'];

        $divRfresh = '';
        if ($gestion) {
            $divRfresh = 'page';
        } else {
            $divRfresh = 'divRefresh';
        }

        $menuContextuel['listePrincipal'][] = [
            'icone' => 'pictoList',
            'lien' => $this->router->generateUri('ProjetAchat.GestionProjetAchat.suivi', ['idProjetAchat' =>  $projet['ID']]),
            'libelle' => $this->trad->t('Suivi'),
        ];

        if ($droitAcces && ($projet['STATUT'] == 'I' ||  $projet['STATUT'] == 'P')) {
            $menuContextuel['listePrincipal'][] = [
                'icone' => 'pictoPass',
                'lien' => '',
                'libelle' => $this->trad->t('Transmettre'),
                'lienJs' => $this->ajaxPopupV2(
                    $this->router->generateUri('ProjetAchat.GestionProjetAchat.popupTransfere', ['idProjetAchat' =>  $projet['ID'], 'typeObjet' => 'D']),
                    'filtre_projetAchat'
                ),
            ];
        }
        if ($droitAcces && $projet['STATUT'] == 'P' && sql::boolSql($projet['SUSPENDU']) == false && sql::boolSql($projet['AJOURNE']) == false) {
            $menuContextuel['listePrincipal'][] = [
                'icone' => 'pictoValidate',
                'lien' => '',
                'libelle' => $this->trad->t('Valider'),
                'lienJs' => $this->popupConfirm(
                    false,
                    $this->router->generateUri('ProjetAchat.GestionProjetAchat.validate', ['idProjetAchat' =>  $projet['ID']]),
                    $this->trad->t('Etes-vous sûr de vouloir valider le projet').' ?',
                    false,
                    $divRfresh,
                    '',
                    false,
                    'filtre_projetAchat'
                ),
            ];
        }

        if ($droitAcces && $projet['STATUT'] == 'E') {
            $menuContextuel['listePrincipal'][] = [
                'icone' => 'pictoClose',
                'lien' => '',
                'libelle' => $this->trad->t('Clôturer'),
                'lienJs' => $this->popupConfirm(
                    false,
                    $this->router->generateUri('ProjetAchat.GestionProjetAchat.cloture', ['idProjetAchat' =>  $projet['ID']]),
                    $this->trad->t('Etes-vous sûr de vouloir clôturer le projet').' ?',
                    false,
                    $divRfresh,
                    '',
                    false,
                    'filtre_projetAchat'
                ),
            ];
        }

        if ($droitAcces) {
            if (($projet['STATUT'] == 'P' || $projet['STATUT'] == 'I' || $projet['STATUT'] == 'E') && sql::boolSql($projet['SUSPENDU']) == false && sql::boolSql($projet['AJOURNE']) == false) {
                $menuContextuel['listeSecondaire'][] = [
                    'lien' => $this->router->generateUri('ProjetAchat.ModeleProjet.createEdit', ['type' => 'D','idProjet' =>  $projet['ID']]),
                    'libelle' => $this->trad->t('Modifier'),
                ];
            }
            $menuContextuel['listeSecondaire'][] = [
                'lien' => $this->router->generateUri('ProjetAchat.ModeleProjet.createEdit', ['type'=>'D', 'idProjet' => $projet['ID'], 'typeSource' => 'D']),
                'libelle' => $this->trad->t('Dupliquer'),
            ];
            $menuContextuel['listeSecondaire'][] = [
                'lien' => $this->router->generateUri('ProjetAchat.ModeleProjet.createEdit', ['type'=>'M', 'idProjet' => $projet['ID'], 'typeSource' => 'D']),
                'libelle' => $this->trad->t('Créer un modèle'),
            ];
            if ((sql::boolSql($projet['SUSPENDU']) && sql::boolSql($projet['IS_PERE'])) || ((sql::boolSql($projet['IS_PERE']) == false && $projet['ID_PERE'] == '0') && sql::boolSql($projet['AJOURNE']) == false)) {
                $menuContextuel['listeSecondaire'][] = [
                    'lien' => $this->router->generateUri('ProjetAchat.Doublons.createSon', ['idProjet' =>  $projet['ID']]),
                    'libelle' => $this->trad->t('Créer un fils'),
                ];
            }

            if ($projet['STATUT'] == 'I' ||  $projet['STATUT'] == 'P') {
                $menuContextuel['listeSecondaire'][] = [
                    'lien' => '',
                    'libelle' => $this->trad->t('Supprimer'),
                    'lienJs' => $this->popupConfirm(
                        false,
                        $this->router->generateUri('ProjetAchat.ModeleProjet.delete', ['type'=>'D', 'idProjet' => $projet['ID']]),
                        $this->trad->t('Etes-vous sûr de vouloir supprimer le projet').' ?',
                        false,
                        $divRfresh,
                        '',
                        false,
                        'filtre_projetAchat'
                    ),
                ];
            }

            if ($projet['STATUT'] == 'E') {
                if (sql::boolSql($projet['SUSPENDU']) == false && sql::boolSql($projet['AJOURNE']) == false) {
                    if ($projet['ActionTerminer'] == 0 || $projet['donneeSaisie'] == 0) {
                        $menuContextuel['listeSecondaire'][] = [
                            'lien' => '',
                            'libelle' => $this->trad->t('Dévalider'),
                            'lienJs' => $this->popupConfirm(
                                false,
                                $this->router->generateUri('ProjetAchat.GestionProjetAchat.devalider', ['idProjetAchat' =>  $projet['ID']]),
                                $this->trad->t('Etes-vous sûr de vouloir dévalider le projet').' ?',
                                false,
                                $divRfresh,
                                '',
                                false,
                                'filtre_projetAchat'
                            ),
                        ];
                    }
                }
            }
        }

        if ($projet['STATUT'] != 'T' && $this->droit['DOA_MACT']) {
            $menuContextuel['listeSecondaire'][] = [
                'lien' => $this->router->generateUri('ProjetAchat.Acteur.switchUser', ['idProjet' =>  $projet['ID']]),
                'libelle' => $this->trad->t('Gérer les acteurs du projet'),
            ];
        }

        if ($this->droit['DOA_AJ_REP'] && ($projet['STATUT'] == 'I' || $projet['STATUT'] == 'P' || $projet['STATUT'] == 'E') && (sql::boolSql($projet['SUSPENDU'])== false || sql::boolSql($projet['AJOURNE'])== true)) {
            if (sql::boolSql($projet['AJOURNE']) == true) {
                $menuContextuel['listeSecondaire'][] = [
                    'lien' => '',
                    'libelle' => $this->trad->t('Reprendre'),
                    'lienJs' => $this->popupConfirm(
                        false,
                        $this->router->generateUri('ProjetAchat.GestionProjetAchat.reprendre', ['idProjetAchat' =>  $projet['ID']]),
                        $this->trad->t('Etes-vous sûr de vouloir reprendre le projet').' ?',
                        false,
                        $divRfresh,
                        '',
                        false,
                        'filtre_projetAchat'
                    ),
                ];
            } else {
                $menuContextuel['listeSecondaire'][] = [
                    'lien' => '',
                    'libelle' => $this->trad->t('Ajourner'),
                    'lienJs' => "displayConfirmationAjournerPopup('".$this->router->generateUri('ProjetAchat.GestionProjetAchat.ajourne', ['idProjetAchat' =>  $projet['ID']])."')",
                ];
            }
        }

        if ($projet['NO_AO_LIE'] && ($this->droit['HA_AO_ADM'] || ($this->droit['HA_AO_CMV'] && $projet['PROPRIETAIRE']==$_SESSION["Session_Login"]))) {
            $menuContextuel['listeSecondaire'][] = [
                'lien' => $this->router->generateUri('Consultation.Consultation.details', ['idAO' => $projet['NO_AO_LIE']]),
                'libelle' => $this->trad->t('Accéder à la consultation liée n°').' '.$projet['NO_AO_LIE'],
            ];
        }

        if ($projet['STATUT'] == 'P'
            && ($this->droit['HA_AO_CMV'] && $projet['PROPRIETAIRE']==$_SESSION["Session_Login"])
            && $this->droit['DOA_IMP_MO']
            && sql::boolSql($projet['SUSPENDU']) == false
        ) {
            $menuContextuel['listeSecondaire'][] = [
                'lien' => $this->router->generateUri('ProjetAchat.GestionProjetAchat.listeModeleImport', ['idProjetAchat' =>  $projet['ID']]),
                'libelle' => $this->trad->t('Appliquer un modèle'),
            ];
        }

        $specifique = new \Helpers\Additional\Specifique\Specifique();
        $namespaceSpecifique = $specifique->specifiqueFunction(
            '\\Modules\\ProjetAchat\\MenuContextuel\\GestionProjetMenuContextuelSpecifique'
        );

        if (class_exists($namespaceSpecifique)) {
            $menuSpec = \Helpers\Additional\Specifique\Specifique::specifique(
                '\\Modules\\ProjetAchat\\MenuContextuel\\GestionProjetMenuContextuelSpecifique',
                'gestionMenuContextuelSpecifique',
                $this->pdo,
                $this->router,
                $this->trad,
                $projet
            );

            if ($menuSpec) {
                $menuContextuel['listeSecondaire'][] = $menuSpec;
            }
        }


        return $menuContextuel;
    }
}
