<?php

namespace Modules\Suivi\MenuContextuel;

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

class SuiviRecepContextuel extends MenuContextuel
{

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

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

        $this->droit = [
            'HA_CA_VIPX'    => Roles::droitsUtilisateur($this->pdo, 'HA_CA_VIPX'),
            'HA_BR_CM'      => Roles::droitsUtilisateur($this->pdo, 'HA_BR_CM'),
            'HA_BR_RET'     => Roles::droitsUtilisateur($this->pdo, 'HA_BR_RET'),
            'HA_BR_DEV'     => Roles::droitsUtilisateur($this->pdo, 'HA_BR_DEV'),
            'HA_BR_IMP'     => Roles::droitsUtilisateur($this->pdo, 'HA_BR_IMP'),
            'HA_BR_IMPV'    => Roles::droitsUtilisateur($this->pdo, 'HA_BR_IMPV'),
            'HA_BR_SUP'     => Roles::droitsUtilisateur($this->pdo, 'HA_BR_SUP'),
            'HA_BR_VAL'     => Roles::droitsUtilisateur($this->pdo, 'HA_BR_VAL'),
            'HA_BR_CTRL'    => Roles::droitsUtilisateur($this->pdo, 'HA_BR_CTRL'),
            'HA_BR_VEV'    => Roles::droitsUtilisateur($this->pdo, 'HA_BR_VEV'), // visualisation des évènements
        ];
    }

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

        $idBr = $doc['NUM_BR'];

        
        if ($this->droit['HA_BR_VEV']) {
            $menuContextuel['listePrincipal'][] = [
                'icone'     => 'pictoList',
                'libelle'   => $this->trad->t('Suivi des événements'),
                'lien'      => $this->router->generateUri('Reception.Workflow.summary', ['bonRecepId' => $idBr]),
            ];
        }

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

        if ($doc['TYP_BR'] == 'R' && $doc['DATE_VAL'] != '00000000' && $this->droit['HA_BR_CM'] && $this->droit['HA_BR_RET']) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle'   => $this->trad->t('Créer un bon de retour'),
                'lien'      => $this->router->generateUri('Reception.CreationBR.creatEdit', ['order' => $idBr, 'type' => 'A', 'mode' => 'C', 'init' => '1']),
            ];
        }

        if ($doc['DATE_VAL'] == '00000000' && $this->droit['HA_BR_VAL']) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle'   => $this->trad->t('Valider'),
                'lienJs'   => $this->confirmationSuivi(
                    $this->router->generateUri('Reception.GestionBR.valDevalSupp', ['br' => $idBr,'action' => 'V']),
                    $pathRefresh,
                    Trad::strBuild($this->trad->t('Voulez-vous valider le bon n°@1@ ?'), $idBr),
                    $divRefresh,
                    'filtre_suivi'
                ),
            ];
        }

        if ($this->droit['HA_BR_DEV'] && $doc['DATE_VAL'] != '00000000' && $doc['FAC_LIG_EXISTS'] != 1) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle'   => $this->trad->t('Dévalider'),
                'lienJs'   => $this->confirmationSuivi(
                    $this->router->generateUri('Reception.GestionBR.valDevalSupp', ['br' => $idBr,'action' => 'D']),
                    $pathRefresh,
                    Trad::strBuild($this->trad->t('Voulez-vous dévalider le bon n°@1@ ?'), $idBr),
                    $divRefresh,
                    'filtre_suivi'
                ),
            ];
        }

        if ($doc['DATE_VAL'] == '00000000') {
            $path = false;
            if ($doc['TYP_BR'] == 'R' && $this->droit['HA_BR_CM']) {
                $path = $this->router->generateUri('Reception.CreationBR.creatEdit', ['order' => $idBr, 'type' => 'R', 'mode' => 'M', 'init' => '1']);
            } elseif ($doc['TYP_BR'] == 'A' && $this->droit['HA_BR_RET']) {
                $path = $this->router->generateUri('Reception.CreationBR.creatEdit', ['order' => $idBr, 'type' => 'A', 'mode' => 'M', 'init' => '1']);
            }

            if ($path) {
                $menuContextuel['listeSecondaire'][] = [
                    'libelle' => $this->trad->t('Modifier'),
                    'lien' => $path,
                ];
            }
        }

        if ($this->droit['HA_BR_SUP'] && $doc['DATE_VAL'] == '00000000' && $doc['FAC_LIG_EXISTS'] != 1) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle'   => $this->trad->t('Supprimer'),
                'lienJs'   => $this->confirmationSuivi(
                    $this->router->generateUri('Reception.GestionBR.valDevalSupp', ['br' => $idBr,'action' => 'S']),
                    $pathRefresh,
                    Trad::strBuild($this->trad->t('Voulez-vous supprimer le bon n°@1@ ?'), $idBr),
                    $divRefresh,
                    'filtre_suivi'
                ),
            ];
        }

        if ($this->droit['HA_BR_CTRL'] && $doc['LIG_A_CONTROL']) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle'   => $this->trad->t('Contrôler le document'),
                'lien'      => $this->router->generateUri('Reception.ControleQualite.saisieControleQualite', ['idDoc' => $idBr])
            ];
        }

        $menuContextuel['listeSecondaire'][] = [
            'libelle'   => $this->trad->t('Gérer les incidents'),
            'lien'      => $this->router->generateUri('GlobalApplication.Incidents.incidents', ['MODULE' => 'suiviBR', 'id' => $idBr]),
        ];

        if ($this->droit['HA_CA_VIPX'] && $this->droit['HA_BR_IMPV']) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle'   => $this->trad->t('BR chiffré'),
                'lien'      => $this->router->generateUri('Reception.Impression.impression', ['id' => $idBr, 'mode' => 'chiffre']),
                'target'    => '_blank',
            ];
        }

        if ($this->droit['HA_BR_IMP'] && $doc['TYP_BR'] == 'R') {
            $menuContextuel['listeSecondaire'][] = [
                'libelle'   => $this->trad->t('BR non chiffré'),
                'lien'      => $this->router->generateUri('Reception.Impression.impression', ['id' => $idBr, 'mode' => 'nonchiffre']),
                'target'    => '_blank',
            ];
        }


        $menuContextuel['listeSecondaire'][] = [
            'libelle'       => $this->trad->t('Répartition demandeur pour les réceptions'),
            'lien'          => $this->router->generateUri('Reception.RepartitionDemandeur.listeDemandeur', ['idDoc' => $idBr])
        ];

        if ($doc['TYP_BR'] == 'A') {
            $menuContextuel['listeSecondaire'][] = [
                'libelle'   => $this->trad->t('Envoyer le bon de retour au fournisseur'),
                'lienJs'    => $this->ajaxPopupV2($this->router->generateUri('Suivi.Suivi.relance', ['typeRelance' => 'RETOUR', 'idDoc' => $idBr]), 'filtre_suivi', $this->trad->t('Mail bon de retour'))
            ];
        }
        
        return $menuContextuel;
    }
}
