<?php

namespace Modules\Fournisseur\Controller;

use API\Partenaire\IFournissCustomTab;
use API\Partenaire\IFournissLink;
use Entity\Model\Hastutil;
use Exception;
use Helpers\Outil\Roles;
use Modules\API\APIExterne\TwigExtension\OutilAPIExtension;

use Modules\Fournisseur\Repository\FircheFournissRepo;
use Skeleton\Controller\Controller;
use Entity\Model\Fourniss;
use Helpers\Session\Session;
use Helpers\Ariane\Ariane;
use Modules\Fournisseur\Outil\DroitUtilisateur;
use Helpers\Ariane\ArianeSub;
use Modules\GlobalApplication\Repository\Workflow;
use Modules\Fournisseur\Repository\GestFourniss;
use Helpers\Pagination\Paginator;
use Modules\Fournisseur\Repository\Indicateur;
use Helpers\Highcharts\Highcharts;
use Helpers\Outil\Sql;
use Entity\Model\WftDemLig;
use Helpers\Log\LogSysteme;
use Modules\Fournisseur\MenuContextuel\GestionMenuContextuel;
use Helpers\Outil\Date;
use Modules\Parametrage\Facture\Repository\ParametrageLAD;
use TwigExtension\OutilExtension;

class FournisseurController extends Controller
{
    const SUBARIANE_PARTN_OFFSET = 10;

    public function indexAction()
    {
        $id = $this->request->getAttribute('id');
        $codeDemande = $this->request->getAttribute('codeDemande');
        $trad = $this->getTranslationService();

        $fournisseur    = '';
        $PARAVRAC       = '';

        $ficheSql = [];
        if ($id != 'noId') {
            $ficheSql = (new FircheFournissRepo($this->pdo))->getFicheInfo($id);
        }

        $xmlResult = new \Modules\Fournisseur\WebService\Fournisseur();
        $xmlResult= $xmlResult->ficheFournisseur([
            "Langue" => $_SESSION['Session_Langue'],
            "Login" => $_SESSION['Session_Login'],
            "no_ao" => $_SESSION["Session_SocUsr"],
            "codeFrs" => $id == 'noId' ? '' : $id,
            'codeDemande' => $codeDemande,
            'affDemande' => '',
            'mode' => 'V',
        ]);
        $gestFourn = new GestFourniss($this->pdo);
        $dateFactureFrs = $gestFourn->dateFactureFrs($id);
        $dateFactureFrs = DATE::dateConverte($dateFactureFrs['DATE_FAC']);
        
        try {
            $fournisseur = new \SimpleXMLElement($xmlResult->responseData);
        } catch (Exception $e) {
            return $this->create404Response("Une erreur est survenue.");
        }

        if ($fournisseur->Statut == "O") {
            $_SESSION['fiche_fournisseur'] = $xmlResult->responseData;

            $PARAVRAC = Sql::parametrageTaxePays($this->pdo, ((string)$fournisseur->Fournisseur->Identity->CODE_PAYS));
        }

        $workflow = new Workflow($this->pdo);
        if ($id != 'noId') {
            $fournis = new Fourniss($this->pdo);
            $fournis = $fournis->find($id);

            $workflow = $workflow->getDemande('FOURNISS', $id);

            $mode = '';
        } else {
            $wftLigne = new WftDemLig($this->pdo);
            $prospect = $wftLigne->find([
                'TYPE_ENT' => 'FOURNISS',
                'CODE_DEMANDE' => $codeDemande,
                'CODE_CHAMP' => 'PROSPECT'
            ]);

            $fournis = [
                'PROSPECT' => ($prospect['VALEUR_CHAMP'] ?? null),
            ];
            $workflow = $workflow->getInfoDemande('FOURNISS', $codeDemande);
            $mode = 'FrsWithOutCode';
        }

        $parametrageOnglet = $this->getParametrageOnglet($fournis ?? []);

        $DroitModif = ($fournisseur->Fournisseur->PROSPECT && roles::droitsUtilisateur($this->pdo, 'HA_PRO_MOD'))
                    || ((string)$fournisseur->Fournisseur->PROSPECT == 0
                        && roles::droitsUtilisateur($this->pdo, 'HA_FOU_MOD'));

        /* gestion CA */

        $gestFourn = new GestFourniss($this->pdo);
        $listeCA = $gestFourn->listeCAFournisseurXML($fournisseur->Fournisseur->ListChiffreAffaire);

        ArianeSub::init();

        // si codedemande est rempli, c'est qu'on viens de la suivie des demandes des fournisseurs
        if ($codeDemande) {
            Ariane::generate(1, $trad->t('Demande fournisseur'), []);

            ArianeSub::generate(0, 0, $trad->t('Fiche fournisseur'), $this->router->generateUri('Fournisseur.Fournisseur.index', ['id' => $id, 'codeDemande' => $codeDemande]), 1);

            if (($parametrageOnglet['DOCS_RATT_NONVISIBLE'] ?? false) != true) {
                ArianeSub::generate(0, 1, $trad->t('Documents rattachés'), $this->router->generateUri('Fournisseur.DocFournisseur.docRattache', ['id' => $id, 'codeDemande' => $codeDemande]), 0);
            }
            $lienFrsSte = Roles::droit($this->pdo, 'LIEN_FOU_STE_ACTIF', 'PARAMFOU');
            if ($lienFrsSte) {
                ArianeSub::generate(0, 2, $trad->t('Société'), $this->router->generateUri('Fournisseur.societe.societe', ['id' => $id, 'codeDemande' => $codeDemande]), 0);
            }
            if (($parametrageOnglet['MOTSCLEFS_NONVISIBLE'] ?? false) != true) {
                ArianeSub::generate(0, 2, $trad->t('Mots clefs'), $this->router->generateUri('Fournisseur.motsClefInteraction.motsClef', ['id' => $id, 'codeDemande' => $codeDemande]), 0);
            }
            if (($parametrageOnglet['PARAMIMPCDE_NONVISIBLE'] ?? false) != true) {
                ArianeSub::generate(0, 3, $trad->t('EDI & Routage'), $this->router->generateUri('Fournisseur.EdiRoutageInteraction.EdiRoutageInteraction', ['id' => $id, 'codeDemande' => $codeDemande]), 0);
            }
            if (($parametrageOnglet['BDD_NONVISIBLE'] ?? false) != true) {
                ArianeSub::generate(0, 4, $trad->t('BDD'), $this->router->generateUri('GlobalApplication.Bdd.bdd', ['MODULE' => 'Fournisseur',      'id' => $id, 'codeDemande' => $codeDemande]), 0);
            }
            if (($parametrageOnglet['ZONESGEO_NONVISIBLE'] ?? false) != true) {
                ArianeSub::generate(0, 5, $trad->t('Zones géographiques'), $this->router->generateUri('Fournisseur.ZoneGeoInteraction.ZoneGeoInteraction', ['id' => $id, 'codeDemande' => $codeDemande]), 0);
            }
            if (($parametrageOnglet['SFAM_NONVISIBLE'] ?? false) != true) {
                ArianeSub::generate(0, 6, $trad->t('Sous-famille(s)'), $this->router->generateUri('Fournisseur.SousFamilleInteraction.sousFamille', ['id' => $id, 'codeDemande' => $codeDemande]), 0);
            }
            if (($parametrageOnglet['TYPACH_NONVISIBLE'] ?? false) != true) {
                ArianeSub::generate(0, 7, $trad->t('Type d\'Achat'), $this->router->generateUri('Fournisseur.TypeAchatInteraction.achat', ['id' => $id, 'codeDemande' => $codeDemande]), 0);
            }

            
            // Custom partenaire tab
            $fournis = (new Workflow($this->pdo))->getFournissDemande($codeDemande);
            $posAriane = 8;
            $listPatenaire = $this->getPartenaireService()->getAll();
            foreach ($listPatenaire as $partenaire) {
                if (!($partenaire instanceof IFournissCustomTab)) {
                    continue;
                }
                $path = $partenaire->getCustomTabPath($this->router, $fournis);
                if ($path == null) {
                    continue;
                }
                ArianeSub::generate(
                    0,
                    $posAriane++,
                    $partenaire->getCustomTabLabel($trad, $fournis),
                    $path
                );
            }

            $libelle = $fournisseur->Fournisseur->Identity->RS;
        } else {
            $this->supplierIndexArianeSubGenerate($id);

            $libelle = $fournis["RS"];
        }

        $session = new Session('Fournisseur');

        if ($workflow && (isset($workflow['STATUT_DEMANDE']) && $workflow['STATUT_DEMANDE'] == '0') || ($codeDemande && isset($workflow['STATUT_DEMANDE']) && $workflow['STATUT_DEMANDE'] == 'R')) {
            $arrayEdit = [
                'id' => $workflow['CODE_DEMANDE'],
                'mode' => 'modification',
                'codeType' => 'CODE_DEMANDE'
            ];

            $codeForPath = $id == 'noId' ? $workflow['CODE_DEMANDE'] : $id;
            $mode = $mode ? $mode : 'modification';
        } else {
            $codeForPath = $id == 'noId' ? $codeDemande : $id;
            $arrayEdit = $mode ? ['id' => $codeForPath, 'mode' => $mode] : ['id' => $codeForPath];
        }

        if ($codeDemande != null && (($workflow['STATUT_DEMANDE'] ?? '') == 'R') && $workflow['TYPE_DEMANDE'] == 'C') {
            if (Session::backToFrs()) {
                $actionButton = 'demRefuser';
                $codeForPath = 'noId';
                $optionButton2 = $codeDemande;
            } else {
                if ($id == 'noId') {
                    $codeForPath = $id;
                }

                $pathButton = $this->router->generateUri('Fournisseur.CreationFournisseur.nouveauFournisseur', ['id' => $codeForPath, 'codeDemande' => $codeDemande]);
            }
        } elseif ($codeDemande == null
            && (
                (($workflow['STATUT_DEMANDE'] ?? '') == '0' && ($workflow['AUTEUR'] ?? '') == $_SESSION['Session_Login'])
                || ($workflow['STATUT_DEMANDE'] ?? '') == 'R' || $workflow == false
            )
        ) {
            if (Session::backToFrs()) {
                $actionButton = 'modification';
                $optionButton2 = $mode;
            } else {
                $pathButton = $this->router->generateUri('Fournisseur.ModificationFournisseur.ModificationFournisseur', $arrayEdit);
            }
        } elseif ($codeDemande && (($workflow['STATUT_DEMANDE'] ?? '') == 'R' || ($workflow['STATUT_DEMANDE'] ?? '') == '0')) {
            if (Session::backToFrs()) {
                $actionButton = 'modification';
                $optionButton2 = $mode;
            } else {
                $pathButton = $this->router->generateUri('Fournisseur.ModificationFournisseur.ModificationFournisseur', $arrayEdit);
            }
        }

        return $this->renderer->render('@Fournisseur/Fournisseur/index', [
            'menuActive' => 'Fournisseur',
            'menuLeft' => 'GestionFournisseur',
            'titleShortList' => $trad->t('Short Lists du fournisseur'),
            'CreationEnCours' => Session::backToFrs(),
            'suiviDemande' => $codeDemande ? true : false,
            'user' => $_SESSION['Session_Login'],
            "libelle_fournisseur" => $libelle,
            'codeDemande' => $codeDemande ?? '',
            "fournisseur" => $fournisseur,
            "code_fournisseur" => $id,
            'DateFacture' => $dateFactureFrs,
            "paramTaxe" => $PARAVRAC,

            'demande' => $workflow,
            'listeCA' => $listeCA,
            "fiche" => true,
            'DroitModif' => $DroitModif,
            'parametrageOnglet' => $parametrageOnglet,
            
            'ficheSql' => $ficheSql,

            'menuContextuel' =>
                (new GestionMenuContextuel(
                    $this->pdo,
                    $this->router,
                    $this->getTranslationService(),
                    $this->contenaire,
                    $session,
                    []
                ))
                ->generateFiche($id, [
                    'arrayEdit' => json_encode($arrayEdit),
                    'codeForPath' => $codeForPath,
                    'actionButton' => $actionButton ?? '',
                    'optionButton2' => $optionButton2 ?? '',
                    'pathButton' => $pathButton ?? '',
                ]),
        ]);
    }

    public function popupChiffreAffaireAction(): string
    {
        $codeFrs = $this->request->getAttribute('id');
        $codeDemande = $this->request->getAttribute('codeDemande');

        $value = [
            "Langue" => $_SESSION['Session_Langue'],
            "Login" => $_SESSION['Session_Login'],
            "no_ao" => $_SESSION["Session_SocUsr"],
            "codeFrs" => $this->request->getAttribute('id'),
            'codeDemande' => $codeDemande,
            'affDemande' => '',
            'mode' => 'V',
        ];

        $xmlResult = new \Modules\Fournisseur\WebService\Fournisseur();
        $xmlResult = $xmlResult->ficheFournisseur($value);
        $fournisseur = new \SimpleXMLElement($xmlResult->responseData);

        $listeCA = new GestFourniss($this->pdo);
        $listeCA = $listeCA->listeCAFournisseurXML($fournisseur->Fournisseur->ListChiffreAffaire, true);

        $paginator = new Paginator();
        $infoPagination = $paginator->generate($listeCA, 10, [], $this->renderer);

        if (!$codeDemande) {
            $path = $this->router->generateUri('Fournisseur.Fournisseur.popupChiffreAffaire', ['id' => $codeFrs]);
        }

        return $this->renderer->render('@Fournisseur/Popup-Fournisseur/popupChiffreAffaire', [
            'infoPagination' => $infoPagination,
            'listeCA' => $listeCA,
            'path' => $path,
        ]);
    }

    public function statistiqueAction(): string
    {
        $id = $this->request->getAttribute('id');

        $fournis = new Fourniss($this->pdo);
        $fournis = $fournis->find($id);

        ArianeSub::generate(0, 5, 'Statistique', $_SERVER['REQUEST_URI'], 1);
        return $this->renderer->render('@Fournisseur/Trash/statistique', [
            'menuActive' => 'Fournisseur',
            'menuLeft' => 'GestionFournisseur',
            "code_fournisseur" => $id,
            "libelle_fournisseur" => $fournis["RS"]
        ]);
    }


    public function indicateursAction(Indicateur $indicateur): string
    {
        $id = $this->request->getAttribute('id');
        $post = $this->request->getParsedBody();

        if ($post) {
            $societe = $post['societe'];
            $annee = $post['periode'];
        } else {
            $societe =  $_SESSION["Session_SocUsr"];
            $annee = $indicateur->getLastPeriodeDispo() ?? date('Y');
        }
        $trad = $this->getTranslationService();
        $fournis = new Fourniss($this->pdo);
        $fournis = $fournis->find($id);

        $nbrIncident = $indicateur->nbrIncident($id, $annee, $societe);
        $infoCA = $indicateur->totalCAParPeriodeBySte($id, $annee, $societe);
        $CAFrs = $indicateur->getCAFournisseurByPeriode($id, $annee);
        if ($CAFrs['CA']??'') {
            $tauxDeDependance = round(($infoCA['CA']/$CAFrs['CA']) * 100, 2);
        } else {
            $tauxDeDependance = 0;
        }
    
        $periodes = $indicateur->periodedispo();

        foreach ($periodes as $val) {
            $listePeriode[$val['CODE_PER']] = $val['LIBELLE'];
        }

        $graphCdeSF = $indicateur->cdeParSF($id, $annee, $societe);
        $graphMontantCde =  $indicateur->montantCdeParSF($id, $annee, $societe);
        $graphCdeMois = $indicateur->cdeParMois($id, $annee, $societe);

        $this->supplierIndexArianeSubGenerate($id);

        ArianeSub::generate(0, 5, $trad->t('Indicateurs'), $_SERVER['REQUEST_URI'], 1, $post);

        $devise = $_SESSION['parametrage']['DEVISE_BASE']??'EUR';
        /* Graph1 */
        $array['value']                  = $graphCdeMois;
        $array['categorie']              = 'mois';
        $array['titre']                  = $trad->t('Nombre de commandes & CA par mois') . ' - ' . ($annee);
        $array['type']                   = 'column';
        $array['detailColone']['NB_CDE'] = ['nom' => $trad->t('Nombre de commandes'), 'type' => 'column', 'axeLier' => 'gauche'];
        $array['detailColone']['CA']     = ['nom' => $trad->t("Chiffre d'affaires"), 'type' => 'spline', 'axeLier' => 'droit', 'tooltip' => $devise];
        $array['legendGraph'][]          = ['texte' => $trad->t('Nb de commandes'), 'format' => '', 'axe' => 'gauche'];
        $array['legendGraph'][]          = ['texte' => $trad->t('CA'), 'format' => ' ' . $devise, 'axe' => 'droit'];

        $highcharts1 = Highcharts::generate($array, $this->pdo, $trad);

        /* fin graph1 */

        /* Graph2 */

        foreach ($graphCdeSF as &$tmp) {
            $tmp['libelle'] = str_replace("'", '’', $tmp['libelle']);
        }
        $array1['value']        = $graphCdeSF;
        $array1['detailDonut']  = ['nom' => 'Nb de cde'];
        $array1['titre']        = $trad->t('Nombre de commandes par sous-famille').' - '.($annee);
        $array1['type']         = 'pie';
        $array1['legend']       = true;


        $highcharts2 = Highcharts::generate($array1, $this->pdo, $trad);

        /* fin graph2 */

        /* Graph3 */

        foreach ($graphMontantCde as &$tmp) {
            $tmp['libelle'] = str_replace("'", '’', $tmp['libelle']);
        }
        $array3['value']        = $graphMontantCde;
        $array3['detailDonut']  = ['nom' => 'Montant de cde', 'tooltip' => $devise];
        $array3['titre']        = $trad->t('Montant commandé par sous-famille') . ' - ' . ($annee);
        $array3['type']         = 'pie';
        $array3['legend']       = true;


        $highcharts3 = Highcharts::generate($array3, $this->pdo, $trad);

        /* fin graph3 */

        if ($tauxDeDependance < 30) {
            $tauxDeDependanceColor = 'vert';
        } elseif ($tauxDeDependance >= 30 && $tauxDeDependance <= 50) {
            $tauxDeDependanceColor = 'orange';
        } else {
            $tauxDeDependanceColor = 'rouge';
        }

        if ($nbrIncident <= 3) {
            $nbrIncidentColor = 'vert';
        } elseif ($nbrIncident == 4 || $nbrIncident == 5) {
            $nbrIncidentColor = 'orange';
        } else {
            $nbrIncidentColor = 'red';
        }

        return $this->renderer->render('@Fournisseur/Fournisseur/indicateurs', [
            'menuActive' => 'Fournisseur',
            'menuLeft' => 'GestionFournisseur',

            'tauxDeDependanceColor' => $tauxDeDependanceColor,
            'annee' => $annee,
            'societe' => $societe,
            "tauxDeDependance" => $tauxDeDependance,
            "libelle_fournisseur" => $fournis["RS"],
            'nbrIncidentColor' => $nbrIncidentColor,
            'dataHighchart2' => $highcharts2,
            'dataHighchart' => $highcharts1,
            'dataHighchart3' => $highcharts3,
            'devise' => $_SESSION['parametrage']['DEVISE_BASE'],
            "nbrCommande" => intval($infoCA['NB_CDES'] ?? 0),
            "nbrIncident" => $nbrIncident,
            "code_fournisseur" => $id,
            "caEngage" => floatval($infoCA['CA'] ?? 0),
            'listePeriode' => $listePeriode,

        ]);
    }

    public function articlesAutoAction(): string
    {
        $post = $this->request->getParsedBody();
        $codeFournisseur = $this->request->getAttribute('id');
        // $post['societe'] = $this->request->getAttribute('societe');
        $post['societe'] = $post['societe'] ?? $_SESSION["Session_SocUsr"] ?? "";

        $trad = $this->getTranslationService();

        ArianeSub::generate(0, 6, $trad->t('Facture sans commande'), $_SERVER['REQUEST_URI'], 1, $post);

        $fournis = new Fourniss($this->pdo);
        $fournis = $fournis->find($codeFournisseur);

        $parametrageRepository = new ParametrageLAD($this->pdo);
        $listes = $parametrageRepository->listeArticlesAutoFournisseur($codeFournisseur, $post);

        $sectorise = (\Helpers\Outil\Roles::droit($this->pdo, 'SISECTOR', 'PARAMSTE') || \Helpers\Outil\Roles::droit($this->pdo, 'SCASECTO', 'PARAMSTE') || \Helpers\Outil\Roles::droit($this->pdo, 'CDCSECTO', 'PARAMSTE')) ? true : false;
        $modificationArticlesSansCommande = Roles::droitsUtilisateur($this->pdo, 'HA_FA_FASC') ? true : false;

        return $this->renderer->render('@Fournisseur/FactureSansCommande/index', [
            "trad"                              => $trad,
            "listes"                            => $listes,
            'menuActive'                        => 'Fournisseur',
            'menuLeft'                          => 'GestionFournisseur',
            "code_fournisseur"                  => $codeFournisseur,
            "libelle_fournisseur"               => $fournis['RS'],
            "siret"                             => $fournis['NO_SIRET'] ?? '',
            "date"                              => date('Ymd'),
            "post"                              => $post,
            "sectorise"                         => $sectorise,
            "modificationArticlesSansCommande"  => $modificationArticlesSansCommande
            // 'infoPagination'          => $infopagination, //TODO : A voir si rajouter
        ]);
    }

    //_____________________________________________________________________________
    // Helper

    /**
     * @todo turn this into a proper navbar int twig
     * @param array<mixed> $fourniss
     * @param array<mixed> $post
     */
    public function arianeSubGenerate(
        array $fourniss,
        string $partnId,
        array $post
    ): void {
        $fournissId = $fourniss['CODE'];

        // Get index Arianne
        $listPatenaire = array_values(array_filter(
            $this
                ->getPartenaireService()
                ->getListByFourniss($fournissId),
            function ($partenaire) {
                if (!($partenaire instanceof IFournissLink)) {
                    return false;
                }
                $route = $partenaire->getRouteDetail();
                if ($route == null) {
                    return false;
                }
                return true;
            }
        ));

        $index = array_search(
            $partnId,
            array_map(function ($part) {
                return $part->getCode();
            }, $listPatenaire)
        );
        if (!is_int($index)) {
            LogSysteme::prefixErrorLog((new \Exception('!!!')));
            return;
        }

        $partn = $listPatenaire[$index];

        ArianeSub::generate(
            0,
            FournisseurController::SUBARIANE_PARTN_OFFSET + intval($index),
            (new OutilAPIExtension($this->pdo, $this->contenaire, $this->router))
                ->generateHtmlLogo($partn),
            $_SERVER['REQUEST_URI'],
            1,
            $post
        );
    }
    
    /**
     * supplierIndexArianeSubGenerate
     * permet de générer le subAriane quand on vient du module des évaluations => présentation des résultats
     *
     * @param  string $id
     * @return void
     */
    public function supplierIndexArianeSubGenerate(string $id): void
    {
        if ($this->router->generateUri('Fournisseur.RecapFournisseur.index', ['id' => $id]) == $_SESSION['ariane']['path']) {
            return;
        }

        $Api = new \Modules\API\APIExterne\Repository\Partenaire($this->pdo);
        $trad = $this->getTranslationService();

        // sinon on viens de la gestion des fournisseur
        Ariane::generate(1, $trad->t('Détail fournisseur'), []);

        ArianeSub::generate(0, 0, $trad->t('Fiche fournisseur'), $this->router->generateUri('Fournisseur.Fournisseur.index', ['id' => $id]), 1);

        $fournis = new Fourniss($this->pdo);
        $fournis = $fournis->find($id);
        $parametrageOnglet = $this->getParametrageOnglet($fournis ?? []);

        if (($parametrageOnglet['DOCS_RATT_NONVISIBLE'] ?? false) != true) {
            $partenCodeList = [];
            if (!empty($fournis['NO_SIRET'] ?? '')) {
                $partenCodeList = $Api->fournisseurListPartenaireConnectDoc($id);
            }
            ArianeSub::generate(
                0,
                1,
                $trad->t('Documents rattachés')
                    . ArianeSub::generateDocAttImage(
                        $this->contenaire->get('baseUrl'),
                        $partenCodeList
                    ),
                $this->router->generateUri(
                    'Fournisseur.DocFournisseur.docRattache',
                    ['id' => $id]
                ),
                0
            );
        }
        if (($parametrageOnglet['INTERACTIONS_NONVISIBLE'] ?? false) != true) {
            ArianeSub::generate(0, 2, $trad->t('Interactions'), $this->router->generateUri('Fournisseur.Interactions.interactions', ['id' => $id]), 0);
        }
        if (($parametrageOnglet['HISTO_NONVISIBLE'] ?? false) != true) {
            ArianeSub::generate(0, 3, $trad->t('Historique'), $this->router->generateUri('GlobalApplication.Historique.historique', ['MODULE' => 'Fournisseur', 'id' => $id]), 0);
        }
        if (($parametrageOnglet['EVAL_NONVISIBLE'] ?? false) != true) {
            ArianeSub::generate(0, 4, $trad->t('Evaluation'), $this->router->generateUri('Evaluation.Resultat.comparativeView', ['supplier' => $id]), 0);
        }
        if (($parametrageOnglet['INDICATEURS_NONVISIBLE'] ?? false) != true) {
            ArianeSub::generate(0, 5, $trad->t('Indicateurs'), $this->router->generateUri('Fournisseur.Fournisseur.indicateurs', ['id' => $id]), 0);
        }
        if (($parametrageOnglet['FACT_SANS_CMD_NONVISIBLE'] ?? false) != true) {
            ArianeSub::generate(0, 6, $trad->t('Facture sans commande'), $this->router->generateUri('Fournisseur.Fournisseur.articlesAuto', ['id' => $id]), 0);
        }

        /**
         * API
         */
        if (($parametrageOnglet['OXA360_NONVISIBLE'] ?? false) != true) {
            $posAriane = self::SUBARIANE_PARTN_OFFSET;

            $listPatenaire = $this->getPartenaireService()->getListByFourniss($id);
            foreach ($listPatenaire as $partenaire) {
                if (!($partenaire instanceof IFournissLink)) {
                    continue;
                }
                $route = $partenaire->getRouteDetail();
                if ($route == null) {
                    continue;
                }
                ArianeSub::generate(
                    0,
                    $posAriane++,
                    (new OutilAPIExtension($this->pdo, $this->contenaire, $this->router))
                        ->generateHtmlLogo($partenaire),
                    $this->router->generateUri(
                        $route,
                        ['fournissId' => $id]
                    )
                );
            }
            $listPatenaire = $this->getPartenaireService()->getAll();
            foreach ($listPatenaire as $partenaire) {
                if (!($partenaire instanceof IFournissCustomTab)) {
                    continue;
                }
                $path = $partenaire->getCustomTabPath($this->router, $fournis);
                if ($path == null) {
                    continue;
                }
                ArianeSub::generate(
                    0,
                    $posAriane++,
                    $partenaire->getCustomTabLabel($trad, $fournis),
                    $path
                );
            }

            if ($Api->fournisseurIsConnectActivite($id, 'INFOLG')) {
                ArianeSub::generate(0, $posAriane++, '<img src ="' . $this->contenaire->get('baseUrl') . 'img/API/logo-info-legale.png" height="20px"/>', $this->router->generateUri('API.InfoLegale.indicateur', ['idFournisseur' => $id]), 0);
            }

            if ($Api->fournisseurIsConnectActivite($id, 'BVD')) {
                ArianeSub::generate(0, $posAriane++, '<img src ="' . $this->contenaire->get('baseUrl') . 'img/API/logo-BVD.png" height="20px"/>', $this->router->generateUri('API.BVD.index', ['idFournisseur' => $id]), 0);
            }
        }

        $specifique = new \Helpers\Additional\Specifique\Specifique();
        $namespaceSpecifique = $specifique->specifiqueFunction('\\Modules\\Fournisseur\\Service\\SubArianeService');
        if (class_exists($namespaceSpecifique)) {
            \Helpers\Additional\Specifique\Specifique::specifique(
                '\\Modules\\Fournisseur\\Service\\SubArianeService',
                'generate',
                $this->pdo,
                $trad,
                $this->router,
                $id
            );
        }
    }
    
    /**
     * getParametrageOnglet
     * Droit de modification Prospect ou Fournisseur
     *
     * @param  array<mixed> $fournis
     * @return array<mixed>
     */
    public function getParametrageOnglet(array $fournis): array
    {
        $DroitUtilisateur = new DroitUtilisateur($this->router);
        $parametrageOnglet = [];
        if (!$DroitUtilisateur->DroitUtilisateur($this->pdo, $fournis) && $DroitUtilisateur->parametrageFournisseurPresent($this->pdo)) {
            $parametrageOnglet = $DroitUtilisateur->parametrageOngletFournisseur($this->pdo);
        }
        // Droit de modification Prospect ou Fournisseur

        return $parametrageOnglet;
    }
}
