<?php

namespace Helpers\Ariane;

use Helpers\Trad\Trad;
use Helpers\Trad\ITrad;
use Modules\GlobalApplication\Repository\LicenceOxalys;
use Skeleton\Router;

class ArianeSub
{


    public static function init() :void
    {
        unset($_SESSION['arianeSub']);
    }

    /**
     *
     * @param int $niveau       - place groupe d'onglet
     * @param int|null $place        - place de l'onglet dans le groupe
     * @param string $titre     - titre de l'onglet
     * @param string $path      - path de l'onglet
     * @param int $active       - onglet actif ou non 0-1
     * @param array<mixed> $post       - les post envoyez (permet de récuperé les filtes lorsque l'on clique sur l'onglet)
     * Les 3 parametres suivants permettent d'utilisé l'ariane pour des div dynamtique en ajax (voir appel d'offre V2)
     * @param string $idAriane          - permet d'ajouté un ID au LI de l'ariane
     * @param string $option          - permet d'ajouté un parametre au LI (style="display:none;")
     * @param string $href              - permet d'ajouté un href a la balise a de l'ariane
     * @param string $badge             - permet d'ajouter une pastille d'information au subAriane avec un tooltip
     */
    public static function generate(
        int $niveau,
        $place,
        string $titre,
        string $path,
        int|bool $active = 0,
        array $post = [],
        $idAriane = '',
        $option = '',
        $href = '',
        string $badge = '',
        bool $activeStatus = false,
        bool $status = false
    ) :void {
        if (isset($_SESSION['arianeSub']['last']) && $niveau <= $_SESSION['arianeSub']['last'] && isset($_SESSION['arianeSub'])) {
            for ($i = $niveau; $i <= (int)($_SESSION['arianeSub']['last'] ?? 0); $i++) {
                if (isset($_SESSION['arianeSub'][$i]) && $i > $niveau) {
                    unset($_SESSION['arianeSub'][$i]);
                }
            }
        }

        $array = [];
        if (is_null($place)) {
            foreach ($_SESSION['arianeSub'][$niveau] as $k => $arianeSub) {
                if ($arianeSub['path'] == $path) {
                    $array = $arianeSub;
                    $array['active'] = true;
                    $place = $k;
                    break;
                }
            }
        }
        if (!$array) {
            $array = [
                'path' => $path,
                'niveau' => $niveau,
                'active' => $active,
                'titre' => $titre,
                'post' => $post,
                'place' => $place,
                'idAriane' => $idAriane,
                'option' => $option,
                'href' => $href,
                'badge' => $badge,
                'activeStatus' => $activeStatus,
                'status' => $status,
            ];
        }

        $_SESSION['arianeSub'][$niveau][$place] = $array;
        $_SESSION['arianeSub']['last'] = $niveau;

        if ($active) {
            $_SESSION['arianeSub']['titre'] = $titre;
            $_SESSION['arianeSub']['active'] = $place;
        }
    }


    /**
     * @TODO move somewhere else ?
     * @param array<string> $listPartenaire
     */
    public static function generateDocAttImage(string $baseUrl, array $listPartenaire): string
    {
        if (empty($listPartenaire)) {
            return '';
        }

        // TODO : filter "Document" Partenaire
        $listImage = array_filter(array_map(function ($partenaireCode) use ($baseUrl) {
            $file = self::getLogoFile($partenaireCode);
            if ($file === null) {
                return null;
            }
            // TODO : move to twig
            return '<img src ="' . $baseUrl . 'img/API/' . $file . '" height="18px" alt="' . $partenaireCode . '" title="' . $partenaireCode . '"/>';
        }, $listPartenaire));

        if (empty($listImage)) {
            return '';
        }

        return '&nbsp;| ' . join('&nbsp;| ', $listImage);
    }

    private static function getLogoFile(string $partnCode): ?string
    {
        switch ($partnCode) {
            case 'HIVEO':
                return 'logo-hiveo.png';
            case 'EAT':
                return 'logo-EAT.png';
            case 'PROVIGIS':
                return 'logo-provigis.svg';
                // TODO
        }
        return null;
    }

    /**
     * initPurchaseRequestSub
     *
     * @param  ITrad $trad
     * @param  Router $router
     * @param  string $id
     * @param  string $module
     * @param  array<mixed> $post
     * @param  int $active
     * @param  LicenceOxalys $licenceOxalys
     * @return void
     */
    public static function initPurchaseRequestSub(ITrad $trad, Router $router, string $id, string $module, array $post, int $active, LicenceOxalys $licenceOxalys): void
    {
        self::init();
        self::generate(0, $place = 0, $trad->t('Articles'), $router->generateUri(
            'DemandeAchat.ArticleDemandeAchat.article',
            [
                'idDA' => $id,
                'MODULE' => $module
            ]
        ), $active == $place ? 1 : 0, $post);
        self::generate(0, $place = 1, $trad->t('Informations'), $router->generateUri(
            'DemandeAchat.DemandeAchat.demandeAchat',
            [
                'idDA' => $id,
                'MODULE' => $module
            ]
        ), $active == $place ? 1 : 0, $post);
        self::generate(0, $place = 2, $trad->t('Clauses'), $router->generateUri(
            'DemandeAchat.Clause.index',
            [
                'idDA' => $id,
                'MODULE' => $module
            ]
        ), $active == $place ? 1 : 0, $post);
        self::generate(0, $place = 3, $trad->t('Pièces-jointes'), $router->generateUri(
            'DemandeAchat.PieceJointe.index',
            [
                'idDA' => $id,
                'MODULE' => $module
            ]
        ), $active == $place ? 1 : 0, $post);
        self::generate(0, $place = 4, $trad->t('Documents rattachés'), $router->generateUri(
            'GlobalApplication.DocumentRattaches.document',
            [
                'MODULE' => $module,
                'id' => $id
            ]
        ), $active == $place ? 1 : 0, $post);
        if ($licenceOxalys->termPaieActive()) {
            self::generate(0, $place = 5, $trad->t('Termes de paiement'), $router->generateUri(
                'DemandeAchat.TermeDePaiement.index',
                [
                    'MODULE' => $module,
                    'idDA' => $id
                ]
            ), $active == $place ? 1 : 0, $post);
        }
    }

    public static function refreshActive() :void
    {
        $activeItemIndex = null;
        $activeItem = null;
        foreach ($_SESSION['arianeSub'][0] as $index => $item) {
            if ($item['path'] == $_SERVER['REQUEST_URI']) {
                $activeItemIndex = $index;
                $activeItem = $item;
            } else {
                $item['active'] = 0;
            }
        }

        if ($activeItem) {
            $_SESSION['arianeSub']['titre'] = $activeItem['titre'];
            $_SESSION['arianeSub']['active'] = $activeItemIndex;
        }
    }
}
