<?php

namespace Modules\Fournisseur\Service;

use Helpers\Session\Session;
use Helpers\Trad\ITrad;
use Modules\Fournisseur\MenuContextuel\TypeAchatMenuContextuel;
use Modules\Fournisseur\Repository\TypeAchat;
use Skeleton\Router;

class TypeAchatService
{
    private \PDO $pdo;
    private ITrad $trad;
    private Router $router;


    public function __construct(\PDO $pdo, ITrad $trad, Router $router)
    {
        $this->pdo = $pdo;
        $this->trad = $trad;
        $this->router = $router;
    }
        
    /**
     * getPurchaseTypeList
     *
     * @param  string $type
     * @return array<mixed>
     */
    public function getPurchaseTypeList(string $type): array
    {
        // @phpstan-ignore-next-line
        $sessionFournisseur = new Session($type);

        $typeAchatSession = $sessionFournisseur->getSessionArray('typeAchat');
        $listeTypeAchat = new TypeAchat($this->pdo);
        $defaut = $listeTypeAchat->TypeAchatParDefaut(); // on récupere la valeur par defaut du parametrage

        if (!$typeAchatSession) { // si le fournisseur n'a pas de type d'achat,
            $array = ['TACFOTAC' => $defaut['TYP_ACH'], 'ETAT' => 'A', 'DEFAUT' => 1];
            array_push($typeAchatSession, $array); // on affiche le type d'achat par defaut
            $sessionFournisseur->setSession('typeAchat', $typeAchatSession);
        }

        $listeTypeAchat = $listeTypeAchat->ListeTypeAchatFournisseur($typeAchatSession, []);
        $menuContextuel = new TypeAchatMenuContextuel($this->pdo, $this->router, $this->trad);

        foreach ($listeTypeAchat as &$typeAchat) { // pour savoir si l'element est par defaut ou pas
            foreach ($typeAchatSession as $tpAchatSession) {
                if ($typeAchat['TYP_ACH'] == $tpAchatSession['TACFOTAC']) {
                    $typeAchat['DEFAUT'] = $tpAchatSession['DEFAUT'];
                }
            }
            $typeAchat['menuContextuel'] = $menuContextuel->generate($typeAchat['LIB_TAC'], $typeAchat['TYP_ACH'], ($type == 'Fournisseur' ? false : true));
        }

        return $listeTypeAchat;
    }
}
