<?php

namespace Modules\GlobalApplication\MenuContextuel;

use API\Partenaire\IEntityApprovalCompare;
use API\Partenaire\Service\PartenaireService;
use Entity\Model\Fourniss;
use Entity\Model\WftDemEnt;
use Helpers\Outil\MenuContextuel;
use Helpers\Outil\Roles;
use Helpers\Outil\Sql;
use Helpers\Trad\ITrad;
use Helpers\Trad\Trad;
use Modules\Fournisseur\Outil\DroitUtilisateur;
use Skeleton\Router;

class WorkflowMenuSignatureContextuel extends MenuContextuel
{
    public string $module;

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

    public PartenaireService $partnService;

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

        $DroitUtilisateur = new DroitUtilisateur($this->router);

        $this->trad = $trad;
        $this->partnService = $partnService;
        $this->module = $module;
        $this->droit = [
            'HA_PRO_VIS'        => roles::droitsUtilisateur($this->pdo, 'HA_PRO_VIS'),
            'HA_FOU_VIS'        => roles::droitsUtilisateur($this->pdo, 'HA_FOU_VIS'),
            'Modif_Prospect'    => $DroitUtilisateur->DroitModificationFournisseurOK($this->pdo, 1),
            'Modif_Refere'      => $DroitUtilisateur->DroitModificationFournisseurOK($this->pdo, 0),
            'HA_SE_AJSI'        => Roles::droitsUtilisateur($this->pdo, 'HA_SE_AJSI'),
            'HA_SE_CHSI'        => Roles::droitsUtilisateur($this->pdo, 'HA_SE_CHSI'),
            'HA_SE_SATT'        => Roles::droitsUtilisateur($this->pdo, 'HA_SE_SATT'),
        ];
    }

    /**
     * @param array<mixed> $object
     * @return array<mixed>
     */
    public function generate($object, bool $signature = false, string $signat = '', string $sigSession = '')
    {
        $menuContextuel = [];

        $mode = 'ModifSign';
        $codeFrs = '';
        if ($this->module == 'Fournisseur') {
            if ($object['CODE_ENREG']  == '') {
                $object['CODE_ENREG'] = 'noId';

                if ($object['ORIGINE'] == 'OXA.LINK') {
                    $mode = 'ModifSignOXALINK';
                }
            }

            $codeFrs = $object['CODE_DEMANDE'];
        }
        
        if ($this->module == 'Fournisseur' && ($this->droit['HA_PRO_VIS'] || $this->droit['HA_FOU_VIS'])) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('Fiche fournisseur'),
                'lien' => $this->router->generateUri('Fournisseur.Fournisseur.index', ['id' =>  $object['CODE_ENREG'], 'codeDemande' => $object['CODE_DEMANDE']]),
                'lienJs' => '',
            ];
        }
        if ($signature && $object['STATUT_DEMANDE'] == '1') {
            if ($this->module == 'Fournisseur' && (Sql::boolSql($object['IS_PROSPECT']) && $this->droit['Modif_Prospect']) || (!Sql::boolSql($object['IS_PROSPECT']) && $this->droit['Modif_Refere'])) {
                $url = $this->router->generateUri('Fournisseur.ModificationFournisseur.ModificationFournisseur', ['id' => $codeFrs, 'mode' => $mode, 'codeType' => 'CODE_DEMANDE']);
                if ($signat) {
                    $urlJs = $this->redirectJSWithPost(
                        $url,
                        (string)json_encode(['signa' => $signat])
                    );
                } else {
                    $urlJs = "unsetSession(
                        '".$this->router->generateUri('Ajax.SessionCreation.unsetSession')."',
                        'Fournisseur',
                        '".$url."'
                    );";
                }

                $menuContextuel['listeSecondaire'][] = [
                    'libelle' => $this->trad->t('Modifier et signer'),
                    'lien' => '',
                    'lienJs' => $urlJs,
                ];
            }

            // <li><a style="cursor:pointer;" class="refuser"
            // onClick='ajaxPopup("{{ path('', {type:module, codeDemande:demande.CODE_DEMANDE | trim, signataire:(sigSession|trim), mode:'R'}) }}",
            //"{{ 'Refus de la demande du' | trad |e('js')|raw }} {{ module | trad |e('js')|raw  }} {{ demande.WDEN_LIBELLE_ENREG }} {{ (demande.CODE_ENREG and demande.CODE_ENREG != 'noId')? '('~demande.CODE_ENREG~')':'' }}");'>{{ 'Refuser' | trad }}</a></li>
        
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('Refuser'),
                'lien' => '',
                'lienJs' => $this->ajaxPopup(
                    $this->router->generateUri('GlobalApplication.WorkflowSignature.signatureWF', ['type' => $this->module, 'codeDemande' => $object['CODE_DEMANDE'], 'signataire' => $sigSession, 'mode' => 'R']),
                    $this->trad->t('Refus de la demande'). ' : '.$object['WDEN_LIBELLE_ENREG'],
                ),
            ];

            if ($this->droit['HA_SE_AJSI']) {
                $menuContextuel['listeSecondaire'][] = [
                    'libelle' => $this->trad->t('Ajouter un signataire'),
                    'lien' => '',
                    'lienJs' => $this->ajaxPopup(
                        $this->router->generateUri('GlobalApplication.WorkflowSignature.ajoutSignataireWF', ['type' => $this->module, 'codeDemande' => $object['CODE_DEMANDE']]),
                        $this->trad->t('Ajouter un signataire'). ' : '.$object['WDEN_LIBELLE_ENREG'],
                    ),
                ];
            }

            if ($this->droit['HA_SE_CHSI']) {
                $menuContextuel['listeSecondaire'][] = [
                    'libelle' => $this->trad->t('Changer de signataire'),
                    'lien' => $this->router->generateUri('GlobalApplication.WorkflowSignature.changementSignataireWF', ['type' => $this->module, 'codeDemande' => $object['CODE_DEMANDE'], 'codeEnreg' => $object['CODE_ENREG'] , 'signataire' => $sigSession]),
                    'lienJs' => '',
                ];
            }
        }

        $menuContextuel['listeSecondaire'][] = [
            'libelle' => $this->trad->t('Suivi des évènements'),
            'lien' => $this->router->generateUri('GlobalApplication.WorkflowEvenement.suiviEvenementWF', ['type' => $this->module, 'codeDemande' => $object['CODE_DEMANDE']]),
            'lienJs' => '',
        ];


        if ($this->droit['HA_SE_SATT']) {
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('Signataires attendus'),
                'lien' => '',
                'lienJs' => $this->ajaxPopup(
                    $this->router->generateUri('GlobalApplication.WorkflowSignature.signatureAttenduWF', ['type' => $this->module, 'codeDemande' => $object['CODE_DEMANDE']]),
                    $this->trad->t('Signataires attendus pour la demande'). ' : '.$object['WDEN_LIBELLE_ENREG'],
                ),
            ];
        }

        if ($object['AUTEUR'] == $_SESSION["Session_Login"] && $object['STATUT_DEMANDE'] == '0') {
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => $this->trad->t('Supprimer la demande'),
                'lien' => '',
                'lienJs' => $this->popupConfirm(
                    false,
                    $this->router->generateUri('GlobalApplication.Workflow.suppresionDemande', ['type' => $this->module, 'codeDemande' => $object['CODE_DEMANDE']]),
                    $this->trad->t('Etes-vous sûr de vouloir supprimer la demande').' : '.$object['WDEN_LIBELLE_ENREG'],
                    false,
                    'suivi-demandes',
                    '',
                    false,
                    'filtre_suivi'
                )
            ];
        }

        $listPatenaire = $this->partnService->getAll();
        foreach ($listPatenaire as $partenaire) {
            if (!($partenaire instanceof IEntityApprovalCompare)) {
                continue;
            }
            $path = $partenaire->getApprovalComparePath($this->router, $object);
            if ($path == null) {
                continue;
            }
            $menuContextuel['listeSecondaire'][] = [
                'libelle' => Trad::strBuild(
                    $this->trad->t('Comparer avec les données de @1@'),
                    $partenaire->getLabel(true)
                ),
                'lien' => $path,
            ];
        }

        return $menuContextuel;
    }
}
