<?php

namespace Modules\Fournisseur\Controller;

use Skeleton\Controller\Controller;
use Entity\Model\Fourniss;
use Modules\Fournisseur\Repository\CentreEmetteur;
use Helpers\Outil\Sql;
use Helpers\Ariane\ArianeSub;
use Helpers\Trad\Trad;
use Modules\Fournisseur\MenuContextuel\CentreEmetteurMenuContextuel;

class CentreEmetteurController extends Controller
{
    public function centreEmetteurAction()
    {
        $id = $this->request->getAttribute('id');
        $post = $this->request->getParsedBody();

        $trad = $this->getTranslationService();

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

        $listeCentreEmetteur = new CentreEmetteur($this->pdo);
        $listeCentreEmetteur = $listeCentreEmetteur->ListeCentreEmetteur($id, $post);

        if (!$listeCentreEmetteur && !$post) {
            return $this->redirect('Fournisseur.CentreEmetteur.creationCentreEmetteur', ["id" => $id]);
        }

        $paginator = new \Helpers\Pagination\Paginator();
        $infopagination = $paginator->generate($listeCentreEmetteur, 0, $post, $this->renderer);

        /* trad */
        $tabSelect = ['T' => $trad->t('Oui'), 'F' =>  $trad->t('Non')];

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

        $menuContextuel = new CentreEmetteurMenuContextuel($this->pdo, $this->router, $this->getTranslationService());
        foreach ($listeCentreEmetteur as &$centre) {
            $centre['menuContextuel'] = $menuContextuel->generate($centre['CODE_FOUR'], $centre['CODE_CTR'], $centre['CENTRE']);
        }

        return $this->renderer->render('@Fournisseur/CentreEmetteur/centreEmetteur', [
            'menuActive'          => 'Fournisseur',
            'menuLeft'            => 'GestionFournisseur',
            "code_fournisseur"    => $id,
            "libelle_fournisseur" => $fournis["RS"],
            'infoPagination'      => $infopagination,
            'listeCE'             => $listeCentreEmetteur,
            'tabSelect'           => $tabSelect,
        ]);
    }

    public function creationCentreEmetteurAction()
    {
        $id = $this->request->getAttribute('id');
        $post = $this->request->getParsedBody();
        
        $trad = $this->getTranslationService();
        $fournis = new Fourniss($this->pdo);
        $fournis = $fournis->find($id);

        if ($this->request->getMethod() == 'POST') {
            $validator = $this->createValidator();

            $validator->zoom('Centre', $post['CODE_CTR'], 'Centre', $this->pdo);
            $validator->isCheck($post['INTEPROC']);
            $validator->isCheck($post['ASSOCIE']);
            $validator->isCheck($post['INTERDIT']);

            $centreEmetteur = new CentreEmetteur($this->pdo);
            $centreExist = $centreEmetteur->selectCentreEmetteur($id, $post['CODE_CTR']);
            $validator->isTrue($centreExist, $trad->t('Ce centre émetteur existe déjà pour ce fournisseur'));
            
            if ($validator->isValid()) {
                $centreEmetteur->CreationCentreEmetteur($id, $post);

                return $this->redirect('Fournisseur.CentreEmetteur.centreEmetteur', ['id' => $id]);
            } else {
                $ErreurValid = $validator->getError();
            }
        }
        
        
        ArianeSub::generate(2, 0, $trad->t('Création centre émetteur'), $_SERVER['REQUEST_URI'], 1);
        
        return $this->renderer->render('@Fournisseur/CentreEmetteur/creationCentreEmetteur', [
            'menuActive' => 'Fournisseur',
            'menuLeft' => 'GestionFournisseur',
            "code_fournisseur" => $id,
            "libelle_fournisseur" => $fournis["RS"],
            'post' => $post,
            'ErreurValid' => $ErreurValid ?? '',
            'trad' => $trad
        ]);
    }

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

        $centrEmetteur = new CentreEmetteur($this->pdo);
        $centrEmetteur->SupresionCentreEmetteur($id, $centre);

        return '';
    }

    public function modificationCentreEmetteurAction()
    {
        $id = $this->request->getAttribute('id');
        $centre = $this->request->getAttribute('centre');

        $post = $this->request->getParsedBody();

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


        $centreEmetteur = new CentreEmetteur($this->pdo);

        if ($this->request->getMethod() == 'POST') {
            $validator = $this->createValidator();

            $validator->isCheck($post['INTEPROC']);
            $validator->isCheck($post['ASSOCIE']);
            $validator->isCheck($post['INTERDIT']);

            if ($validator->isValid()) {
                //$centreEmetteur->CreationCentreEmetteur($id, $post);
                $centreEmetteur->updateCentreEmetteur($id, $centre, $post);

                return $this->redirect('Fournisseur.CentreEmetteur.centreEmetteur', ['id' => $id]);
            } else {
                $ErreurValid = $validator->getError();
            }
        } else {
            $post = $centreEmetteur->selectCentreEmetteur($id, $centre);
        }
        
        $trad = $this->getTranslationService();
        
        ArianeSub::generate(2, 0, $trad->t('Modification centre émetteur'), $_SERVER['REQUEST_URI'], 1);
        
        return $this->renderer->render('@Fournisseur/CentreEmetteur/creationCentreEmetteur', [
            'menuActive' => 'Fournisseur',
            'menuLeft' => 'GestionFournisseur',
            "code_fournisseur" => $id,
            "libelle_fournisseur" => $fournis["RS"],
            'post' => $post,
            'ErreurValid' => $ErreurValid ?? '',
        ]);
    }

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

        $listeCentreEmetteur = new CentreEmetteur($this->pdo);
        $listeCentreEmetteur = $listeCentreEmetteur->ListeCentreEmetteur($id, $post, true);

        foreach ($listeCentreEmetteur as &$value) {
            $value['ASSOCIE'] = sql::boolSql($value['ASSOCIE']) ? 'Oui' : 'Non';
            $value['INTEPROC'] = sql::boolSql($value['INTEPROC']) ? 'Oui' : 'Non';
            $value['INTERDIT'] = sql::boolSql($value['INTERDIT']) ? 'Oui' : 'Non';
        }


        \Helpers\ExportTo\Outils::gestionEmailAsync2(
            "export_liste_centre_emmeteur_" . $id,
            $listeCentreEmetteur,
            $this->JWTKEY,
            $this->router,
            $this->getTranslationService()
        );

        return 'ok';
    }
}
