<?php
namespace Modules\Fournisseur\Controller;

use Helpers\Parametres\Constante;
use Skeleton\Controller\Controller;
use Modules\Fournisseur\Repository\SousFamille;
use Helpers\Session\Session;
use Modules\Fournisseur\WebService\Fournisseur;

class SousFamilleController extends Controller
{
    public function init()
    {
        if (!session::sessionExist('Fournisseur') && !session::sessionExist('FournisseurSimplie')) {
            return $this->redirect('Index.Index.error');
        }
    }
    
    public function sousFamilleAction() : string
    {
        $post = $this->request->getParsedBody();
        
        $session = new Session('Fournisseur');
        $listeSSFamilleSession = $session->getSessionArray('sousFamille');

        $sfm = (new SousFamille($this->pdo))->listFamilleTree(
            array_column($listeSSFamilleSession, 'CODE_SFAM', 'CODE_SFAM'),
            $post
        );
        
        $trad = $this->getTranslationService();

        return $this->renderer->render('@Fournisseur/SousFamille/CreationSousFamille', [
            'modeFournisseur' => $session->getMode(),
            'gestion' => true,
            'menuActive' => 'Fournisseur',
            'menuLeft' => 'GestionFournisseur',
            "sousFamille" => true,
            'post' => $post,

            'listeEtat' => ['A' => $trad->t('Nouveau'),'S' => $trad->t('Supprimer')],
            'listeFam'          => $sfm,
            'listeSfam'         => array_column(
                $sfm,
                'listSousFam',
                'CODE_FAM'
            ),
            'listeStatutSfam'   => array_column(
                $listeSSFamilleSession,
                'ETAT',
                'CODE_SFAM'
            ),
        ]);
    }
    
    public function sousFamilleModificationAction() : string
    {
        $post = $this->request->getParsedBody();
        $codeFrs = $this->request->getAttribute('id');
        $session = new Session('Fournisseur');
        $mode = $session->getSession('etatFournisseur');
        
        if ($session->getSession('OXALINK')) {
            $codeDemande = $codeFrs;
        } else {
            $code = $codeFrs;
        }
        
        $value=[
            "Langue" => $_SESSION['Session_Langue'],
            "Login" => $_SESSION['Session_Login'],
            "no_ao" => $_SESSION["Session_SocUsr"],
            "codeFrs" => $code??'',
            'codeDemande' => $codeDemande??'',
            'affDemande' => 'TRUE',
            'mode' => $mode,
            'signa' => $session->getSession('signa'),
        ];
        
        if ($mode=='M' || $session->getSession('ModifSigner')) {
            $lockModif = $session->getSessionArray('droitInteraction')['SsFamille']=='0'? true:false;
        }
        
        $session = new Session('Fournisseur');
        $listeSSFamilleSession = $session->getSession()['sousFamille'] ?? null;
        
        if ($listeSSFamilleSession === null) {
            $xmlFile = $session->getSession('file_save_frs');
            
            if ($xmlFile) {
                $fileTMP = $_SESSION['dir_tmp'].$xmlFile;
                
                $fileContentXML = file_get_contents($fileTMP);
                $ficheFourniss = new \SimpleXMLElement($fileContentXML);
            } else {
                $ficheFourniss = new Fournisseur();
                $ficheFourniss = $ficheFourniss->ficheFournisseur($value);
                $ficheFourniss = new \SimpleXMLElement($ficheFourniss->responseData);
            }
            
            $listeSSFamilleSession=[];
            if ($ficheFourniss->Fournisseur->ListSsFamille) {
                foreach ($ficheFourniss->Fournisseur->ListSsFamille->CODE_SFAM as $value) {
                    array_push($listeSSFamilleSession, ['CODE_SFAM' =>strval($value), 'ETAT' => strval($value->attributes()->Etat)]);
                }
            }
            $session->setSession('sousFamille', $listeSSFamilleSession);
        }

        $sfm = (new SousFamille($this->pdo))->listFamilleTree(array_column($listeSSFamilleSession, 'CODE_SFAM', 'CODE_SFAM'), $post);
        $trad = $this->getTranslationService();
        
        $listeStatutSfam = array_column(
            $listeSSFamilleSession,
            'ETAT',
            'CODE_SFAM'
        );

        foreach ($sfm as &$f) {
            if ($f['listSousFam']) {
                $allDelete = true;
                foreach ($f['listSousFam'] as $sf) {
                    if ($listeStatutSfam[$sf['CODE_SFA']] != 'S') {
                        $allDelete = false;
                    }
                }
                $f['allSfamDelete'] = $allDelete;
            } else {
                $f['allSfamDelete'] = true;
            }
        }

        return $this->renderer->render('@Fournisseur/SousFamille/CreationSousFamille', [
            //'modifFourniss' => true,
            'modeFournisseur' => $session->getMode(),
            'gestion' => true,
            'menuActive' => 'Fournisseur',
            'menuLeft' => 'GestionFournisseur',
            "sousFamille" => true,
            'id' => $session->getSession('CODE'),
            'lockModif' => $lockModif??false,
            'codeDemande' => $codeDemande??null,
            'post' => $post,

            'listeEtat' => ['A' => $trad->t('Nouveau'),'S' => $trad->t('Supprimer')],
            'listeFam'          => $sfm,
            'listeSfam'         => array_column(
                $sfm,
                'listSousFam',
                'CODE_FAM'
            ),
            'listeStatutSfam'   => $listeStatutSfam,
        ]);
    }
    
    public function popupAjoutSousFamilleAction() : string
    {
        $post = $this->request->getParsedBody();
        $type = $this->request->getAttribute('type');

        if ($type) {
            $session = new Session($type);
            $post['urlRefresh'] = $this->router->generateUri('Fournisseur.SousFamille.ajaxSousFamilleTableau', ['type' => $type]);
        } else {
            $session = new Session('Fournisseur');
        }

        $listeSSFamille = $session->getSessionArray('sousFamille');

        $sousFamilleRepo = new SousFamille($this->pdo);
        /*$listeSousFamille = $listeSousFamille->ListeSousFamille($listeSSFamille, $post);*/
        
        $listeFamille = $sousFamilleRepo->listeFamille($post);
        $listeSousFamille = $sousFamilleRepo->listeSfamille($post, $listeSSFamille);
        
        $sfamByFam = [];
        foreach ($listeSousFamille as $sfamille) {
            $sfamByFam[$sfamille['CODE_FAM']][] = $sfamille;
        }

        foreach ($listeFamille as &$famille) {
            $famille['sFamille'] = $sfamByFam[$famille['CODE_FAM']]??[];
            $famille['sFamilleCount'] = count($sfamByFam[$famille['CODE_FAM']]??[]);
        }
        
        return $this->renderer->render('@Fournisseur/Popup-sousFamille/listeSousFamille', [
            'listeFamille' => $listeFamille,
            'id' => $session->getSession('CODE'),
            'pathRefresh' => $post['urlRefresh']??'',
            'post' => $post,
            'type' => $type
        ]);
    }
    
    public function ajaxAjoutSousFamilleAction() : string
    {
        $post = $this->request->getParsedBody();
        $type = $this->request->getAttribute('type');

        if ($type) {
            $session = new Session($type);
        } else {
            $session = new Session('Fournisseur');
        }
        $ssFamilleSession=$session->getSessionArray('sousFamille');
        
        /*
            on vas recevoir x post
            parcourir les post et effectuer le code x fois
        */
        
        foreach ($post as $key => $val) {
            $val;
            if (strpos($key, 'checkbox_SS_FAMILLE_') === 0) {
                $familleAdd = substr($key, 20);
                
                $familleAdd = str_replace(Constante::replacePoint, '.', $familleAdd);
                $familleAdd = str_replace(Constante::replaceEspace, ' ', $familleAdd);

                $EstPresent=false;
                foreach ($ssFamilleSession as &$famille) {
                    if ($famille['CODE_SFAM']==$familleAdd) {
                        $famille['ETAT']='A';
                        $EstPresent=true;
                        break;
                    }
                }
                
                if (!$EstPresent) {
                    array_push($ssFamilleSession, ['CODE_SFAM' => $familleAdd, 'ETAT' => 'A']);
                }
            }
        }
        
        
        $session->setSession('sousFamille', $ssFamilleSession);
        
        return '';
    }
    
    public function popupConfirmationSuppressionAction() : string
    {
        $code = $this->request->getAttribute('id');
        $post = $this->request->getParsedBody();
        
        return $this->renderer->render('@Fournisseur/Popup-sousFamille/confirmationSuppresionSousFamille', [
            'menuActive' => 'Fournisseur',
            'menuLeft' => 'GestionFournisseur',
            "code_fournisseur" => $code,
            "sousFamille" => $post['divCode'],
        ]);
    }
    
    public function ajaxSuppresionSousFamilleAction() : string
    {
        $post = $this->request->getParsedBody();
        $type = $this->request->getAttribute('type');

        if ($type) {
            $session = new Session($type);
        } else {
            $session = new Session('Fournisseur');
        }
        $ssFamilleSession=$session->getSessionArray('sousFamille');
        $ssFamilleSessionSave =$session->getSessionArray('SAVE_sousFamille');

        if (strpos($post['entity'], 'groupeFamille_') === 0) {
            $ssfamilleREPO = new SousFamille($this->pdo);
            $listeTMP = $ssfamilleREPO->listeSousFamilleByFamille(substr($post['entity'], 14));
            $arraySSFamille = [];
            
            foreach ($listeTMP as $ssFamille) {
                $arraySSFamille[] = $ssFamille['CODE_SFA'];
            }
        } else {
            $arraySSFamille = [$post['entity']];
        }

        foreach ($ssFamilleSession as $key => $value) {
            $value;
            if (in_array($ssFamilleSession[$key]['CODE_SFAM'], $arraySSFamille)) {
                $ssFamilleSession[$key]['ETAT']='S';
            }
        }

        $session->setSession('sousFamille', $ssFamilleSession);

        if ($type) {
            return (string)json_encode(
                [
                    'path' => $this->router->generateUri('Fournisseur.SousFamille.ajaxSousFamilleTableau', ['type' => $type]),
                    'pathOnlyRedirect' => false
                
                ]
            );
        }
  
        
        return '';
    }


    public function ajaxSousFamilleTableauAction() : string
    {
        $post = $this->request->getParsedBody();
        $type = $this->request->getAttribute('type');
        $trad = $this->getTranslationService();

        if ($type) {
            $sessionFournisseur = new Session($type);
        } else {
            $sessionFournisseur = new Session('Fournisseur');
        }
        $listeSSFamille = $sessionFournisseur->getSessionArray('sousFamille');

        $sfm = (new SousFamille($this->pdo))->listFamilleTree(
            array_column($listeSSFamille, 'CODE_SFAM', 'CODE_SFAM'),
            $post
        );

        $lockModif = ($sessionFournisseur->getSessionArray('droitInteraction')['SsFamille'] ?? '' )=='0'? true:false;

        return $this->renderer->render('@Fournisseur/SousFamille/CreationSousFamille', [
            'lockModif'         => $lockModif,
            'trad' => $trad,

            'listeEtat' => ['A' => $trad->t('Nouveau'),'S' => $trad->t('Supprimer')],
            'listeFam'          => $sfm,
            'listeSfam'         => array_column(
                $sfm,
                'listSousFam',
                'CODE_FAM'
            ),
            'listeStatutSfam'   => array_column(
                $listeSSFamille,
                'ETAT',
                'CODE_SFAM'
            ),
        ]);
    }



    ///ajax-sousFamille-tableau.twig
}
