<?php

namespace Modules\Contrat\MenuContextuel;

use Entity\Model\Paravrac;
use Helpers\Outil\MenuContextuel;
use Helpers\Outil\Roles;
use Helpers\Outil\Sql;
use Helpers\Session\Session;
use Helpers\Trad\ITrad;
use Helpers\Trad\Trad;
use Helpers\User\User;
use Modules\Fournisseur\Outil\DroitUtilisateur;
use Skeleton\Router;

class GestionAccordCadreContextuel extends MenuContextuel
{
    /**
     * @var array<mixed> droit
     */
    public $droit;

    /**
     * @var bool droit
     */
    public $uoActif;
    
    public function __construct(\PDO $pdo, Router $router, ITrad $trad)
    {
        parent::__construct($pdo, $router, $trad);

        $this->droit = [
            'HA_ACD_CM'     => \Helpers\Outil\Roles::droitsUtilisateur($this->pdo, 'HA_ACD_CM'),
            'HA_ACD_ADM'    => \Helpers\Outil\Roles::droitsUtilisateur($this->pdo, 'HA_ACD_ADM'),
            'HA_CA_VIS'     => \Helpers\Outil\Roles::droitsUtilisateur($this->pdo, 'HA_CA_VIS'),
            'HA_STATTAB'    => \Helpers\Outil\Roles::droitsUtilisateur($this->pdo, 'HA_STATTAB'),
            'OX_SUPPACH'    => \Helpers\Outil\Roles::droitsUtilisateur($this->pdo, 'OX_SUPPACH'),
        ];

        $UOActif = (new Paravrac($this->pdo))->find(['CODEPARV' => 'CHOIX_UO', 'TYPEPARV' => 'OXAPROC']);
        if (($UOActif['LIB01PARV'] ?? 'N') == 'O') {
            $this->uoActif = true;
        } else {
            $this->uoActif = false;
        }
    }

    /**
     * @param array<mixed> $accCadre
     * @return array<mixed>
     */
    public function generate($accCadre, string $type, string $idType)
    {
        $menuContextuel = [];

        if ($this->droit['HA_STATTAB']) {
            $menuContextuel['listePrincipal'][] = [
                'icone' => 'pictoPreview',
                'libelle' => $this->trad->t('Cumuls'),
                'lien' => $this->router->generateUri('GlobalApplication.Historique.historique', ['MODULE' => 'ACD', 'id' => $accCadre['CODE_ACD'], 'SOUSMODULE' => $type]),
            ];
        }
        if ($this->droit['HA_ACD_CM']) {
            $menuContextuel['listePrincipal'][] = [
                'icone' => 'pictocreate',
                'libelle' => $this->trad->t('Créer un avenant'),
                'lien' => '',
                'lienJs' => $this->ajaxPopup(
                    $this->router->generateUri('Contrat.accord-cadre.popupCreationAvenant', ['type' => 'accordCadre', 'idacc' => $accCadre['CODE_ACD']]),
                    $this->trad->t("Création Avenant")." : ". $accCadre['CODE_ACD'],
                ),
            ];
        }

        $menuContextuel['listePrincipal'][] = [
            'icone' => 'pictoFrameworkAgreementsHistorical',
            'libelle' => $this->trad->t('Suivi'),
            'lien' => $this->router->generateUri(
                'Contrat.Event.index',
                ['idacc' => $accCadre['CODE_ACD']]
            ),
        ];

        if (($this->droit['HA_ACD_ADM'] && $accCadre['CREERPAR'] == 1) || $this->droit['HA_ACD_CM']) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('Modifier'),
                'lien' => $this->router->generateUri('Contrat.accord-cadre.modification', ['idacc' => $accCadre['CODE_ACD']]),
            ];
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('Centres autorisés'),
                'lien' => $this->router->generateUri('Contrat.centre-autorise.centreEmetteur', ['idacc' => $accCadre['CODE_ACD'], 'type' => $type, 'idType' => $idType]),
            ];
    
            if ($this->uoActif) {
                $menuContextuel['listeSecondaire'][] = [
                    'libelle' => $this->trad->t('UO autorisées'),
                    'lien' => $this->router->generateUri('Contrat.Uo.gestionUo', ['type' => $type, 'idacc' => $accCadre['CODE_ACD']]),
                ];
            }
    
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('Articles'),
                'lien' => $this->router->generateUri('Contrat.accord-cadre.article', ['type' => $type, 'idacc' => $accCadre['CODE_ACD']]),
            ];
        }
        $accCadre['AVENANT'] = trim($accCadre['AVENANT']);
        $menuContextuel['listeSecondaire'][] = [
            'libelle' => $this->trad->t('RFA'),
            'lien' => $this->router->generateUri(
                'Contrat.RFA.liste',
                ['type' => $type, 'idacc' => $accCadre['CODE_ACD']]
                +($accCadre['AVENANT']? ['idAvenant' => $accCadre['AVENANT']]:[])
            ),
        ];

        $menuContextuel['listeSecondaire'][] = [
            'libelle' => $this->trad->t('Documents rattachés'),
            'lien' => $this->router->generateUri('Contrat.accord-cadre.docRattache', ['id' => $accCadre['CODE_ACD']]),
        ];

        if ($this->droit['HA_ACD_CM']) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('Commentaire'),
                'lien' => '',
                'lienJs' => $this->ajaxPopup(
                    $this->router->generateUri('Contrat.accord-cadre.popupCommentaire', ['type' => 'accordCadre','idacc' => $accCadre['CODE_ACD']]),
                    $this->trad->t('Commentaire de l\'Accord Cadre').' '.$accCadre['CODE_ACD']
                ),
            ];
        }

        $menuContextuel['listeSecondaire'][] = [
            'libelle' => $this->trad->t('Imprimer'),
            'lien' => $this->router->generateUri('Contrat.accord-cadre.imprimer', [
                'type' => $type,
                'idacc' => $accCadre['CODE_ACD'],
                'idFourniss' => $accCadre['CODE_FOUR']??'fds']),
        ];

        if ($accCadre['AVENANT']) {
            if ($this->droit['HA_ACD_ADM']) {
                $menuContextuel['listeSecondaire'][] = [
                    'libelle' => $this->trad->t('Supprimer l\'avenant'),
                    'lien' => '',
                    'lienJs' => $this->popupConfirm(
                        false,
                        $this->router->generateUri('Contrat.accord-cadre.suppresionAvenant', ['idacc' => $accCadre['CODE_ACD'], 'idAvenant' => $accCadre['AVENANT']]),
                        $this->trad->t('Etes-vous sûr de vouloir supprimer l\'avenant')." ".$accCadre['AVENANT']." ?",
                        true,
                        'marche',
                        '',
                        true,
                        'form_filtre_acc'
                    ),
                ];
            }

            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('Visu Historisée'),
                'lien' => $this->router->generateUri('Contrat.accord-cadre.historise', ['type' => $type,'idacc' => $accCadre['CODE_ACD']]),
            ];
        }

        if ($this->droit['HA_CA_VIS']) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('Commandes'),
                'lien' => $this->router->generateUri('Contrat.accord-cadre.commande', ['type' => $type,'idacc' => $accCadre['CODE_ACD']]),
            ];
        }

        if ($this->droit['HA_ACD_CM']) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('Duplication'),
                'lien' => $this->router->generateUri('Contrat.accord-cadre.dupliquer', ['type' => $type,'idacc' => $accCadre['CODE_ACD']]),
            ];
        }
        
        return $menuContextuel;
    }
}
