<?php

namespace Container\MenuTop;

use Entity\Model\Hastutil;
use Helpers\Additional\Additional;
use Helpers\Outil\Roles;
use Modules\GlobalApplication\Repository\LicenceOxalys;
use Psr\Container\ContainerInterface;
use Skeleton\Router;
use Helpers\Outil\Sql;

class S2C extends AbsMenuTop
{

    use \Traits\Menu\Droit;

    protected string $pack;

    /**
     * __construct
     *
     * @param  Additional $additional
     * @return void
     */
    public function __construct(Additional $additional)
    {
        $this->pack = 'S2C';
        $this->additional = $additional;
    }

    /**
     * @return array<mixed>
     */
    public function getListeAction(router $router, ContainerInterface $contenaire, \PDO $pdo)
    {
        /** @var \Helpers\Trad\ITrad */
        $trad = $contenaire->get(\Helpers\Trad\ITrad::class);
        $menu = [];

        $droit['OX_GESTFOU'] = Roles::droitsUtilisateur($pdo, 'OX_GESTFOU');

        if ((
                Roles::droitsUtilisateur($pdo, 'OX_CDB')
                && (
                    Roles::droitsUtilisateur($pdo, 'HA_CA_VIS')
                    || Roles::droitsUtilisateur($pdo, 'HA_CA_CMV')
                    || Roles::droitsUtilisateur($pdo, 'HA_DA_VISU')
                    || Sql::boolSql((new Hastutil($pdo))->find($_SESSION['Session_Login'])['DEMAND'])
                )
            )
            || $this->getAll()
        ) {
            $menu[] = [
                'id' => 'menuTopCollecteBesoins',
                'pathLogin' => 'CollecteBesoins',
                'path' => $router->generateUri('GlobalApplication.CollecteDesBesoins.index'),
                'libelle' => $trad->t('Collecte des besoins'),
                'menuActive' => 'CollecteBesoins'
            ];
        }

        if (Roles::droitsUtilisateur($pdo, 'HA_AO_CMV') || Roles::droitsUtilisateur($pdo, 'HA_AO_ADM') || Roles::droitsUtilisateur($pdo, 'HA_AO_LIS') || $this->getAll()) {
            $menu[] = [
                'id' => 'menuTopConsultation',
                'pathLogin' => 'consultations',
                'path' => $router->generateUri('Consultation.GestionConsultation.index'),
                'libelle' => $trad->t('Consultations'),
                'menuActive' => 'Consultations'
            ];
        }

        if (Roles::droitsUtilisateur($pdo, 'HA_ACD_CM') || Roles::droitsUtilisateur($pdo, 'HA_MAR_CM') || Roles::droitsUtilisateur($pdo, 'HA_TYM_CM') || $this->getAll()) {
            $menu[] = [
                'id' => 'menuTopContrats',
                'pathLogin' => 'contrat',
                'path' => $router->generateUri('Contrat.accord-cadre.index', ['type' => 'ALL', 'idacc' => 'ALL']),
                'libelle' => $trad->t('Accords-cadres'),
                'menuActive' => 'Contrats'
            ];
        }

        if ($droit['OX_GESTFOU'] || $this->getAll()) {
            $menu[] = [
                'id' => 'menuTopFournisseurs',
                'pathLogin' => 'fournisseur',
                'path' => $router->generateUri('Fournisseur.GestionFournisseur.index'),
                'libelle' => $trad->t('Fournisseurs'),
                'menuActive' => 'Fournisseur'
            ];
        }

        if ((new LicenceOxalys($pdo))->dOAActive() && Roles::droitsUtilisateur($pdo, 'DOA_DOA_SV')) {
            if (roles::droitsUtilisateur($pdo, 'DOA_DON_CM')
                || (roles::droitsUtilisateur($pdo, 'DOA_DOA_SV'))
                || roles::droitsUtilisateur($pdo, 'DOA_DOA_CM')
                || Roles::droitsUtilisateur($pdo, 'DOA_OPE_CM')
                || roles::droitsUtilisateur($pdo, 'DOA_DOA_TT')
                || Roles::droitsUtilisateur($pdo, 'DOA_OPE')
                || $this->getAll()
            ) {
                $menu[] = [
                    'id' => 'menuTopProjetsAchats',
                    'pathLogin' => 'projetAchat',
                    'path' => $router->generateUri('ProjetAchat.GestionProjetAchat.tableauBord'),
                    'libelle' => $trad->t('Projets Achats'),
                    'menuActive' => 'ProjetAchat'
                ];
            }
        }

        return $menu;
    }
}
