<?php
namespace Modules\GlobalApplication\Controller;

use Skeleton\Controller\Controller;
use GuzzleHttp\Psr7\Response;
use Helpers\Trad\Trad;
use Helpers\Validator\Validator;
use Modules\GlobalApplication\Repository\Planning;
use Helpers\Parametres\Constante;

class PlanningController extends Controller
{
    public function planningAction() : string
    {
        $post       = $this->request->getParsedBody();
        $MODULE = $this->request->getAttribute('MODULE');
        $id = $this->request->getAttribute('id');
        $noPo = $this->request->getAttribute('noPo');
        $action = $this->request->getAttribute('action');
        
        $Planning = new Planning($this->pdo);
        $Articles = new \Entity\Model\Articles($this->pdo);

        /* trad */
        
        $trad = $this->getTranslationService();

        /* Récupération du planning */
        switch ($MODULE) {
            case 'DA':
                if (!isset($post['ligne_planning']) || $post['ligne_planning']=='') {
                    $listePlanning = $Planning->getPlanningDA($id, $noPo);
                }
                $DaLigne = new \Entity\Model\DaLigne($this->pdo);
                $ligneDocument = $DaLigne->find(['NO_DA' => $id, 'NO_PO' => $noPo]);
                $texteNoDoc = $trad->t('N° de DA');
                break;
            case 'CDE':
                $texteNoDoc = $trad->t('N° de CDE');
                break;
        }

        if (isset($post['ligne_planning']) && $post['ligne_planning']!='') {
            $liste_ligne_planning = explode('|', $post['ligne_planning']);
            foreach ($liste_ligne_planning as $ligne) {
                $tblLigne = explode('_', $ligne);
                $listePlanning[] = [
                    'DTE_LIV' => $tblLigne[0],
                    'QTE' => $tblLigne[1],
                ];
            }
        }
        
        // TODO
        $ligneDocument['QteConditionnement'] = '0.000';
        $ligneDocument['ValeurUniteDAArticle'] = '1.00000';
        $ligneDocument['uniteArticle'] = $ligneDocument['CODE_ART'] != '' ? $Articles->find($ligneDocument['CODE_ART'])['UNIT']: $ligneDocument['UNITE'];

        /* VALUE SELECT */
        $tabPeriodicite = [
            'M' => $trad->t('Mensuelle'),
            'T' => $trad->t('Trimestrielle'),
            'S' => $trad->t('Semestrielle'),
            'A' => $trad->t('Annuelle'),
        ];
        
        $tabPeriode = [
            'D' => $trad->t('Début de période'),
            'F' => $trad->t('Fin de période'),
        ];

        for ($i=0; $i<32; $i++) {
            $tabJoursAppli[$i]=$i;
        }
                
        return $this->renderer->render('@GlobalApplication/Planning/planning', [
            'MODULE' => $MODULE,
            'id' => $id,
            'noPo' => $noPo,
            'action' => $action,
            'listePlanning' => $listePlanning,
            'ligneDocument' => $ligneDocument,
            'texteNoDoc' => $texteNoDoc,
            'tabPeriodicite' => $tabPeriodicite,
            'tabPeriode' => $tabPeriode,
            'tabJoursAppli' => $tabJoursAppli,
        ]);
    }

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

        $ligne['DTE_LIV'] = '00000000';
        $ligne['QTE'] = '0';
        
        return $this->renderer->render('@GlobalApplication/Planning/ligne', [
            'id'        => $id,
            'ligne'     => $ligne,
            'index'     => $post['lastIndex']+1,
        ]);
    }

    public function validationLigneAction()
    {
        $post       = $this->request->getParsedBody();
        $validator  = $this->createValidator();
        $trad = $this->getTranslationService();

        $retour = [];
        $listPlanning = [];

        //$dateVide = false;
        $quantiteCumule = 0;

        foreach ($post as $key => $value) {
            $value;
            if (strpos($key, 'planning_DTE_LIV_') === 0) {
                $indexLigne = str_replace('planning_DTE_LIV_', '', $key);
                
                /* Vérification date de livraison */
                // if($validator->isDate($post['planning_DTE_LIV_'.$indexLigne], '', '', true, $trad->t('Date de livraison'))){
                //     if ($post['planning_DTE_LIV_'.$indexLigne] == '00000000') {
                //         $dateVide = true;
                //     }
                //     else {
                //         $validator->isTrue($post['planning_ReceptionAuto']==1 && ($post['planning_DTE_LIV_'.$indexLigne]<$post['planning_dateDebContrat'] || $post['planning_dateFinContrat']<$post['planning_DTE_LIV_'.$indexLigne]), '<br />'.Trad::strBuild($trad->t('La date @3@ n\'est pas comprise entre @1@ et @2@.'), $post['dateDebContrat'], $post['dateFinContrat'], $post['planning_DTE_LIV_'.$indexLigne]));
                //     }
                // }
                if ($validator->isDate($post['planning_DTE_LIV_'.$indexLigne], '', '', false, $trad->t('Date de livraison'))) {
                    $validator->isTrue($post['planning_ReceptionAuto']==1 && ($post['planning_DTE_LIV_'.$indexLigne]<$post['planning_dateDebContrat'] || $post['planning_dateFinContrat']<$post['planning_DTE_LIV_'.$indexLigne]), '<br />'.Trad::strBuild($trad->t('La date @3@ n\'est pas comprise entre @1@ et @2@.'), $post['planning_dateDebContrat'], $post['planning_dateFinContrat'], $post['planning_DTE_LIV_'.$indexLigne]));
                }

                /* Vérification quantité */
                if ($validator->isFloat($trad->t('Quantité'), $post['planning_QTE_'.$indexLigne], Constante::formatQTE, true) &&
                    $validator->isTrue($post['planning_QTE_'.$indexLigne]<0, '<br />'.Trad::strBuild($trad->t('Il ne peut y avoir de quantité négative (@1@).'), $post['planning_QTE_'.$indexLigne]))
                ) {
                    $affichageUnite1 = '';
                    $affichageUnite2 = '';
                    if ($post['planning_UNITE']!=$post['planning_uniteArticle']) {
                        $affichageUnite1 = ' '+$post['planning_UNITE'];
                        $affichageUnite2 = ' '+$post['planning_uniteArticle'];
                    }
                    if ($validator->isTrue($post['planning_QteConditionnement']!=0 && !ctype_digit($post['planning_QTE_'.$indexLigne] * $post['planning_ValeurUniteDAArticle']/ $post['planning_QteConditionnement']), '<br />'.Trad::strBuild($trad->t('La quantité @1@ @2@ n\'est pas un multiple de la quantité de conditionnement @3@  @4@.'), $post['planning_QTE_'.$indexLigne], $affichageUnite1, $post['planning_QteConditionnement'], $affichageUnite2))) {
                        $quantiteCumule = $quantiteCumule+$post['planning_QTE_'.$indexLigne];
                    };
                }
                
                $listPlanning[] = $post['planning_DTE_LIV_'.$indexLigne].'_'.$post['planning_QTE_'.$indexLigne];
            }
        }
        
        // $validator->isTrue($dateVide, '<br />'.$trad->t('Chaque ligne doit contenir une date.'));
        if ($validator->isValid()) {
            $validator->isTrue($quantiteCumule != $post['planning_QTE_DEM'], '<br />'.Trad::strBuild($trad->t('La quantité cumulée doit être égale à @1@'), $post['planning_QTE_DEM']));
        }

        if ($validator->isValid()) {
            if (count($listPlanning)>1) {
                $ligne_DTELIVSOU = '00000000';
            } else {
                $ligne_DTELIVSOU = explode('_', $listPlanning[0])[0];
            }
            $retour = [
                'statut' => 'O',
                'ligne_planning' => implode('|', $listPlanning),
                'ligne_DTELIVSOU' => $ligne_DTELIVSOU,
            ];
        } else {
            $retour = [
                'statut' => 'E',
                'erreur' => $validator->getError(),
            ];
        }
        
        return new Response(200, [
                    
        ], (string) \json_encode($retour));
    }

    public function getSinglePlanningAction()
    {
        $post       = $this->request->getParsedBody();
        $validator  = $this->createValidator();

        
        
        $trad = $this->getTranslationService();
        $retour = [];
        $validator->isDate($post['DATE_LIV'], '', '', false, $trad->t('Date de livraison'));
        
        
        $retour = [
            'ligne_planning' => $post['DTELIVSOU'].'_'.$post['QTE_DEM'],
        ];
        
        return new Response(200, [
                    
        ], (string) \json_encode($retour));
    }
}
