<?php

namespace Modules\Suivi\MenuContextuel;

use Helpers\Outil\MenuContextuel;
use Helpers\Outil\Roles;
use Helpers\Outil\Sql;
use Helpers\Trad\ITrad;
use Modules\GlobalApplication\Repository\LicenceOxalys;
use Skeleton\Router;

class SuiviDaContextuel extends MenuContextuel
{

    /**
     * @var array<mixed> droit
     */
    public $droit;

    /**
     * Summary of license
     * @var array<mixed>
     */
    private array $license;

    public function __construct(\PDO $pdo, Router $router, ITrad $trad)
    {
        parent::__construct($pdo, $router, $trad);

        $param = Sql::paravrac($this->pdo, 'OXAPROC', 'SUIVI_BUDGET');
        if ($param) {
            $param = explode('|', $param);
        } else {
            $param = [];
        }

        $this->droit = [
            'HA_CA_VIPX' => Roles::droitsUtilisateur($this->pdo, 'HA_CA_VIPX'),
            'HA_CA_CMV' => Roles::droitsUtilisateur($this->pdo, 'HA_CA_CMV'),
            'HA_DA_IMPN' => Roles::droitsUtilisateur($this->pdo, 'HA_DA_IMPN'),
            'HA_DA_CHEX' => Roles::droitsUtilisateur($this->pdo, 'HA_DA_CHEX'),
            'HA_DA_CRE' => Roles::droitsUtilisateur($this->pdo, 'HA_DA_CRE'),
            'HA_DA_DEV' => Roles::droitsUtilisateur($this->pdo, 'HA_DA_DEV'),
            'HA_DA_IMP' => Roles::droitsUtilisateur($this->pdo, 'HA_DA_IMP'),
            'HA_DA_MOD' => Roles::droitsUtilisateur($this->pdo, 'HA_DA_MOD'),
            'HA_DA_SUP' => Roles::droitsUtilisateur($this->pdo, 'HA_DA_SUP'),
            'HA_DA_VAL' => Roles::droitsUtilisateur($this->pdo, 'HA_DA_VAL'),
            'HA_SE_SATT' => Roles::droitsUtilisateur($this->pdo, 'HA_SE_SATT'),

            'INT_DEVAL_DA_TRAITEE' => sql::paravrac($this->pdo, 'PARAMGEN', 'INT_DEVAL_DA_TRAITEE'),
            'ConsoBudgetSign' => $param[1] == 'O' ? true : false,
        ];

        $this->license = [
            'TermPaie' => (new LicenceOxalys($this->pdo))->termPaieActive()
        ];
    }

    /**
     * @param array<mixed> $doc
     * @return array<mixed>
     */
    public function generate($doc, string $divRefresh, string $pathRefresh)
    {
        $menuContextuel = [];

        $idDa = $doc['NO_DA'];

        $menuContextuel['listePrincipal'][] = [
            'icone' => 'pictoList',
            'libelle' => $this->trad->t('Suivi des événements'),
            'lien' => $this->router->generateUri('DemandeAchat.Workflow.summary', ['demandeId' => $idDa])
            //'lien'    => $this->router->generateUri('DemandeAchat.Event.suivi', ['idDA' => $idDa]),
        ];


        $menuContextuel['listePrincipal'][] = [
            'icone' => 'pictoDoc',
            'libelle' => $this->trad->t('Documents rattachés'),
            'lien' => $this->router->generateUri('GlobalApplication.DocumentRattaches.document', ['MODULE' => 'GestionDemandeAchat', 'id' => $idDa]),
        ];

        if ($this->droit['HA_DA_MOD'] && $doc['DTE_VAL'] == '00000000' && $_SESSION['STATUT_RECH_ART'] == 1) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('Modifier'),
                'lienJs' => $this->ajaxPopupV2(
                    $this->router->generateUri('Suivi.Suivi.popChargeDocToPanier', ['typeDoc' => 'DA', 'idDoc' => $idDa, 'action' => 'modification']),
                    'filtre_suivi',
                ),
            ];
        }

        if ($doc['DTE_VAL'] == '00000000' && $this->droit['HA_DA_SUP']) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('Supprimer'),
                'lienJs' => $this->confirmationSuivi(
                    $this->router->generateUri('DemandeAchat.SuppressionDemandeAchat.supprimer', ['idDA' => $idDa]),
                    $pathRefresh,
                    $this->trad->t('Etes-vous sûr de vouloir supprimer la demande d\'achat') . " " . $idDa . " ?",
                    $divRefresh,
                    'filtre_suivi'
                ),
            ];
        }

        if ($this->droit['HA_DA_CRE'] && $this->droit['HA_CA_VIPX'] && $_SESSION['STATUT_RECH_ART'] == 1) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('Dupliquer'),
                'lienJs' => $this->ajaxPopupV2(
                    $this->router->generateUri('Suivi.Suivi.popChargeDocToPanier', ['typeDoc' => 'DA', 'idDoc' => $idDa, 'action' => 'duplication']),
                    'filtre_suivi',
                ),
            ];
        }

        if ($this->droit['HA_SE_SATT']) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('Signataires attendus'),
                'lienJs' => $this->ajaxPopup(
                    $this->router->generateUri('Signature.SignatureDa.signatureAttendu', ['idDoc' => $idDa]),
                    $this->trad->t('Signataires attendus pour la demande N°') . ' ' . $idDa
                ),
            ];
        }

        $menuContextuel['listeSecondaire'][] = [
            'libelle' => $this->trad->t('Pièces Jointes'),
            'lien' => $this->router->generateUri('DemandeAchat.PieceJointe.index', ['idDA' => $idDa]),
        ];


        $menuContextuel['listeSecondaire'][] = [
            'libelle' => $this->trad->t('Commentaires autres signataires'),
            'lien' => $this->router->generateUri('DemandeAchat.Event.suivi', ['idDA' => $idDa, 'MODULE' => 'signataire']),
        ];

        if ($_SESSION['STATUT_RECH_ART'] == 1 && $this->droit['HA_DA_CHEX']) {
            if ($doc['CHIF_EXEC'] == 'C') {
                $libelle = $this->trad->t('Passer en Exécution le document');
            } else {
                $libelle = $this->trad->t('Passer en Chiffrage le document');
            }

            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $libelle,
                'lienJs' => $this->ajaxPopupV2(
                    $this->router->generateUri(
                        'Suivi.Suivi.popChargeDocToPanier',
                        [
                            'typeDoc' => 'DA',
                            'idDoc' => $idDa,
                            'action' => 'modificationChifExe'
                        ]
                    ),
                    'filtre_suivi',
                ),
            ];
        }

        if ($this->droit['HA_DA_DEV']
            && $doc['DTE_VAL'] != '00000000'
            && $doc['CDE_EXIST'] == 0
            && (
                Sql::toBool($doc['TRAITEE']) == false
                || $this->droit['INT_DEVAL_DA_TRAITEE'] == 'O'
            )
        ) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('Dévalider'),
                'lienJs' => $this->confirmationSuivi(
                    $this->router->generateUri('DemandeAchat.DevalidationDemandeAchat.devalider', ['idDA' => $idDa]),
                    $pathRefresh,
                    $this->trad->t('Etes-vous sûr de vouloir dévalider la demande d\'achat') . " " . $idDa . " ?",
                    $divRefresh,
                    'filtre_suivi'
                ),
            ];
        }

        if ($this->droit['HA_DA_IMP']) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('DA chiffrée'),
                'lien' => $this->router->generateUri('DemandeAchat.ImpressionGlobaleDemandeAchatController.impressionDemandeAchat', ['idDA' => $idDa, 'typeImpression' => 'chiffre']),
                'target' => '_blank',
            ];
        }

        if ($this->droit['HA_DA_IMPN']) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('DA non chiffrée'),
                'lien' => $this->router->generateUri('DemandeAchat.ImpressionGlobaleDemandeAchatController.impressionDemandeAchat', ['idDA' => $idDa, 'typeImpression' => 'nonchiffre']),
                'target' => '_blank',
            ];
        }

        if ($this->droit['ConsoBudgetSign'] && $this->droit['HA_CA_VIPX']) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('Conso. budget'),
                'lienJs' => $this->ajaxPopupV2(
                    $this->router->generateUri('GlobalApplication.ConsommationBudgetaire.index', ['typeDoc' => 'DA', 'numDoc' => $idDa]),
                    'filtre_suivi',
                    $this->trad->t('Consommation budgétaire de la DA n°') . $idDa,
                ),
            ];
        }

        if ($this->license['TermPaie'] && $doc['TP_EXIST'] == 1) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('Termes de paiement'),
                'lienJs' => $this->redirectJSWithPost($this->router->generateUri(
                    'DemandeAchat.TermeDePaiement.index',
                    [
                        'MODULE' => 'DemandeAchat',
                        'idDA' => $idDa
                    ]
                ), json_encode(['visualisation' => 'P2P'])?:'')
            ];
        }

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

        if (class_exists($namespaceSpecifique)) {
            $menuSpec = \Helpers\Additional\Specifique\Specifique::specifique(
                '\\Modules\\Suivi\\MenuContextuel\\GestionDaMenuContextuelSpecifique',
                'gestionMenuContextuelSpecifique',
                $this->pdo,
                $this->router,
                $this->trad,
                $doc
            );
            if ($menuSpec) {
                $menuContextuel['listeSecondaire'][] = $menuSpec;
            }
        }

        return $menuContextuel;
    }
}
