<?php

namespace Modules\Consultation\MenuContextuel;

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

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

    /**
     * @param Itrad $trad
     * @param array<mixed> $droit
     */
    public function __construct(\PDO $pdo, Router $router, $trad, $droit)
    {
        parent::__construct($pdo, $router, $trad);
        $this->droit = $droit;
    }

    /**
     * @param array<mixed> $consultation
     * @param array<mixed> $fournisseur
     * @param array<mixed> $reponseFrs
     * @return array<mixed>
     */
    public function generate(string $idAO, $consultation, $fournisseur, bool $canEdit, array $reponseFrs)
    {
        $menuContextuel = [];

        $enCours = ($consultation['DTE_VALID_AO'] != '00000000');

        if ($canEdit) {
            $menuContextuel['listeSecondaire'][] = [
                'lien' => $this->router->generateUri('Fournisseur.DocFournisseur.docRattache', ['id' => $fournisseur['CODE_FOU']]),
                'libelle' => $this->trad->t('Voir les documents rattachés'),
                'lienJs' => false,
            ];

            $menuContextuel['listeSecondaire'][] = [
                'lien' => $this->router->generateUri('Consultation.AjoutFournisseur.editFournisseur', ['idAO' => $idAO, 'idFrs' => $fournisseur['CODE_FOU'], 'typeFG' => $fournisseur['TYPE_FG']]),
                'libelle' => $this->trad->t('Modifier les informations fournisseur'),
                'lienJs' => false,
            ];

            $menuContextuel['listeSecondaire'][] = [
                'lien' => $this->router->generateUri('Consultation.AjoutFournisseur.editFournisseur', ['idAO' => $idAO, 'idFrs' => $fournisseur['CODE_FOU'], 'typeFG' => $fournisseur['TYPE_FG'], 'changeContact' => true]),
                'libelle' => $this->trad->t('Modifier les contacts fournisseur'),
                'lienJs' => false,
            ];

            $menuContextuel['listeSecondaire'][] = [
                'lien' => false,
                'libelle' => $this->trad->t('Supprimer'),
                'lienJs' => $this->popupConfirm(
                    true,
                    $this->router->generateUri('Consultation.AjoutFournisseur.deleteFournisseur', ['idAO' => $idAO, 'idFrs' => $fournisseur['CODE_FOU'], 'typeFG' => $fournisseur['TYPE_FG']]),
                    $this->trad->t('Etes-vous sûr de vouloir supprimer le fournisseur') . ' ' . $fournisseur['RS'] . ' ?',
                    false,
                    'refreshFrs',
                    '',
                    false,
                    'filtre_Consultation'
                ),
            ];
        }

        if (Sql::boolSql($consultation['ACC_CONF']) && Sql::boolSql($fournisseur['ACC_CONF_VALID']) == false && $enCours) {
            if ($fournisseur['FIC_ACC_CONF_SIGNE'] == '') {
                $menuContextuel['listeSecondaire'][] = [
                    'lien' => false,
                    'libelle' => $this->trad->t('Ajouter un accord de confidentialité'),
                    'lienJs' => $this->ajaxPopupV2(
                        $this->router->generateUri('Consultation.AjoutFournisseur.popupCreateEditAccord', ['idAO' => $idAO, 'idFrs' => $fournisseur['CODE_FOU'], 'typeFG' => $fournisseur['TYPE_FG'], 'mode' => 'create']),
                        '',
                        $this->trad->t('Ajouter un accord de confidentialité'),
                    ),
                ];
            } else {
                $menuContextuel['listeSecondaire'][] = [
                    'lien' => false,
                    'libelle' => $this->trad->t('Valider l\'accord de confidentialité'),
                    'lienJs' => $this->popupConfirm(
                        true,
                        $this->router->generateUri('Consultation.AjoutFournisseur.ajaxValiderAccord', ['idAO' => $idAO, 'idFrs' => $fournisseur['CODE_FOU'], 'typeFG' => $fournisseur['TYPE_FG']]),
                        $this->trad->t('Etes-vous sûr de vouloir valider l\'accord de confidentialité du fournisseur') . ' ' . ($fournisseur['TYPE_FG'] == 'F' ? $fournisseur['RS'] : $fournisseur['RS_GRP']) . ' ?',
                        false,
                        'refreshFrs',
                        '',
                        false,
                        'filtre_Consultation'
                    ),
                ];

                $menuContextuel['listeSecondaire'][] = [
                    'lien' => false,
                    'libelle' => $this->trad->t('Refuser l\'accord de confidentialité'),
                    'lienJs' => $this->ajaxPopupV2(
                        $this->router->generateUri('Consultation.AjoutFournisseur.popupRefuserAccord', ['idAO' => $idAO, 'idFrs' => $fournisseur['CODE_FOU'], 'typeFG' => $fournisseur['TYPE_FG']]),
                        '',
                        $this->trad->t('Refuser l\'accord de confidentialité'),
                    ),
                ];
            }
        }


        if ($enCours
            && (
                Sql::boolSql($fournisseur['GEREPORTAIL']) == false
                || $this->droit['HA_AO_SRF']
            )
            && (
                    // Accord conf est signé ou n'existe pas
                (
                    Sql::boolSql($consultation['ACC_CONF'])
                    && Sql::boolSql($fournisseur['ACC_CONF_VALID'])
                )
                || Sql::boolSql($consultation['ACC_CONF']) == false
            )
        ) {
            $hasReponse = !empty($fournisseur['Reponse.DTE_REP']);
            $hasDraft   = !empty($fournisseur['Draft.DTE_REP']);
            $aoFourId   = [
                'idAO' => $idAO,
                'idFrs' => $fournisseur['CODE_FOU'],
                'typeFG' => $fournisseur['TYPE_FG'],
            ];
            if (!$hasReponse && !$hasDraft) {
                $menuContextuel['listeSecondaire'][] =

                    [
                        'lien' => $this->router->generateUri(
                            'Consultation.SaisieReponses.createEditEntet',
                            $aoFourId
                        ),
                        'libelle' => $this->trad->t('Ajouter une réponse'),
                    ];
            } elseif ($hasDraft) {
                if ($consultation['RFI_Q'] == 'I') {
                    $path = $this->router->generateUri(
                        'Consultation.SaisieReponsesPJ.listePJ',
                        $aoFourId + [
                            'idRep' => $fournisseur['Draft.DTE_REP'],
                            'CV' => $fournisseur['Draft.C_V'],
                            'typeDoc' => 'P'
                        ]
                    );
                } else {
                    $path = $this->router->generateUri(
                        'Consultation.SaisieReponses.listeLigne',
                        $aoFourId + [
                            'idRep' => $fournisseur['Draft.DTE_REP'],
                            'CV' => $fournisseur['Draft.C_V'],
                        ]
                    );
                }

                $menuContextuel['listeSecondaire'][] = [
                    'lien' => $path,
                    'libelle' => $this->trad->t('Modifier la réponse'),
                ];
            } else {
                $listeParam = array_merge(
                    $aoFourId,
                    [
                        'idRep' => $reponseFrs[0]['DTE_REP'],
                        'CV' => $reponseFrs[0]['C_V']
                    ]
                );
                if ($consultation['RFI_Q'] == 'I') {
                    $listeParam = array_merge(
                        $listeParam,
                        [
                            'typeDoc' => 'P'
                        ]
                    );
                }
                $menuContextuel['listeSecondaire'][] =
                    [
                        'lien' => $this->router->generateUri(
                            $consultation['RFI_Q'] == 'Q' || $consultation['RFI_Q'] == 'P'
                            ? 'Consultation.SaisieReponses.listeLigne'
                            : 'Consultation.SaisieReponsesPJ.listePJ',
                            $listeParam
                        ),
                        'libelle' => $this->trad->t('Voir la réponse'),
                    ];
            }
        } elseif ($enCours
             && (
                    // Accord conf est signé ou n'existe pas
                (
                    Sql::boolSql($consultation['ACC_CONF'])
                    && Sql::boolSql($fournisseur['ACC_CONF_VALID'])
                )
                || Sql::boolSql($consultation['ACC_CONF']) == false
            )
        ) {
            $aoFourId = [
                'idAO' => $idAO,
                'idFrs' => $fournisseur['CODE_FOU'],
                'typeFG' => $fournisseur['TYPE_FG'],
            ];

            $listeParam = array_merge(
                $aoFourId,
                [
                    'idRep' => $reponseFrs[0]['DTE_REP'],
                    'CV' => $reponseFrs[0]['C_V']
                ]
            );
            if ($consultation['RFI_Q'] == 'I') {
                $listeParam = array_merge(
                    $listeParam,
                    [
                        'typeDoc' => 'P'
                    ]
                );
            }
            $menuContextuel['listeSecondaire'][] =
                [
                    'lien' => $this->router->generateUri(
                        $consultation['RFI_Q'] == 'Q' || $consultation['RFI_Q'] == 'P'
                        ? 'Consultation.SaisieReponses.listeLigne'
                        : 'Consultation.SaisieReponsesPJ.listePJ',
                        $listeParam
                    ),
                    'libelle' => $this->trad->t('Voir la réponse'),
                ];
        }

        return $menuContextuel;
    }
}
