<?php
namespace Modules\Fournisseur\Controller;

use Skeleton\Controller\Controller;
use Entity\Model\Fourniss;
use Entity\Model\Pays;
use Helpers\Validator\Validator;
use Modules\Fournisseur\Repository\Articles;
use Modules\Fournisseur\Outil\DroitUtilisateur;
use Helpers\Ariane\ArianeSub;
use Helpers\Trad\Trad;
use Helpers\Session\Session;
use Helpers\Parametres\Constante;

class CreationArticleFGController extends Controller
{
    public function creationAction()
    {
        $id = $this->request->getAttribute('id');
        $module = $this->request->getAttribute('MODULE');
        $articleUrl = $this->request->getAttribute('article');
        $post = $this->request->getParsedBody();
        $article = new Articles($this->pdo);

        $trad = $this->getTranslationService();
        
        if ($this->request->getMethod() == 'POST') {
            $validator = $this->createValidator();
            
            $validator->zoom('Articles', $post['CODE_ART'], $trad->t('Code article'), $this->pdo, false);
            $validator->isDate($post['DTEVALMIN'], '', '', true, $trad->t('Validité du'));
            $validator->isDate($post['DTEVALMAX'], '', '', true, $trad->t('Validité au'));
            $validator->isFloat($trad->t('Remise'), $post['REMISE'], Constante::formatMontant);
            
            $validator->isStringSansEspace($trad->t('Code chez le fournisseur'), $post['REFARTFOU'], 0, 12);
            $validator->isStringAvecEspace($trad->t('Désignation chez le fournisseur'), $post['DESARTFOU'], 0, 60);
            
            $validator->isFloat($trad->t('Qté de conditionnement'), $post['QTE_COND'], Constante::formatQTE);
            $validator->isFloat($trad->t('Volume (m3)'), $post['VOLUME'], 9.2);
            $validator->isFloat($trad->t('Poids (kg) brut'), $post['POIDS'], 9.2);
            $validator->isFloat($trad->t('Poids (kg) net'), $post['POIDSNET'], 9.2);
            $validator->coherenceValue($post['POIDSNET'], $post['POIDS'], $trad->t('Poids (kg) net'), $trad->t('Poids (kg) brut'));
            $validator->isFloat($trad->t('Longueur (cm)'), $post['LONGU'], 9.2);
            $validator->isFloat($trad->t('Largeur (cm)'), $post['LARG'], 9.2);
            $validator->isFloat($trad->t('Hauteur (cm)'), $post['HAUT'], 9.2);
            
            $validator->zoom('Country', trim($post['PAY_ORI']), $trad->t('Pays origine'), $this->pdo, true);
            $validator->zoom('Country', trim($post['PAY_PROV']), $trad->t('Pays de provenance'), $this->pdo, true);

            $validator->isFloat($trad->t('Quantité'), $post['QTE'], Constante::formatQTE);
            $validator->isFloat($trad->t('Prix'), $post['PU'], constante::formatPU);
            
            $articleExist = $article->articleExiste($post['CODE_ART'], $id, $module);
            
            $validator->isTrue($articleExist, '<br />'. $trad->t('Cet article est déjà présent pour ce fournisseur'));
            
            $matches  = (array)str_replace("QTE_ADD_", "", preg_grep('/^QTE_ADD_/', array_keys($post)));
            $position = array_keys($matches);
            $prix=[];
            foreach ($position as $i) {
                $validator->isFloat($trad->t('Quantité').' '.$matches[$i], $post['QTE_ADD_'.$matches[$i]], Constante::formatQTE);
                $validator->isFloat($trad->t('Prix').' '.$matches[$i], $post['PU_ADD_'.$matches[$i]], constante::formatPU);
                
                array_push($prix, ['QTE' => $post['QTE_ADD_'.$matches[$i]], 'PU' => $post['PU_ADD_'.$matches[$i]]]);
            }
            
            if ($validator->isValid()) {
                $article->ajouterArticleFG($id, $module, $post);
                $article->ajouterPrixArticle($id, $post['CODE_ART'], $post, $module);
                
                foreach ($prix as $insert) {
                    $article->ajouterPrixArticle($id, $post['CODE_ART'], $insert, $module);
                }
                
                if ($articleUrl) {
                    $session = new Session('Fournisseur');
                    $session->setSession('ONGLET', 'conditions');
                    return $this->redirect('Fournisseur.ModificationFournisseur.ModificationFournisseur', ['id' => $id]);
                } else {
                    return $this->redirect('Fournisseur.Articles.articles', ['MODULE' => $module,'id' => $id]);
                }
            } else {
                $ErreurValid = $validator->getError();
            }
        } else {
            $post['CODE_ART'] = $articleUrl;
        }
        
        if ($module=='Fournisseur') {
            $fournis = new Fourniss($this->pdo);
            $fournis = $fournis->find($id);
            
            $menuActive = 'Fournisseur';
            $menuLeft = 'GestionFournisseur';
            $titre = $this->getTranslationService()->t('Fournisseurs');
        } else {
            $menuLeft = 'GestionGroupement';
            $menuActive = 'Fournisseur';
            $titre = $trad->t('Groupements de fournisseur');
        }
        
        ArianeSub::generate(2, 0, $trad->t('Création article'), $_SERVER['REQUEST_URI'], 1);
        
        $sessionFournisseur = new Session('Fournisseur');

        $tabPays = (new Pays($this->pdo))->listChoice();
        
        return $this->renderer->render('@Fournisseur/Articles/creationArticleFG', [
            'menuActive'          => $menuActive,
            'menuLeft'            => $menuLeft,
            "libelle"             => $fournis["RS"]??'',
            'MODULE'              => $module,
            'id'                  => $id,
            'articles'            => $post,
            'ErreurValid'         => $ErreurValid??'',
            'listePrix'           => $prix??'',
            'TITRE'               => $titre,
            'articleFraisPort'    => $articleUrl? true:false,
            'modeFournisseur'     => $sessionFournisseur->getMode(),
            'ficheFourniss'       => false,
            'tabPays'             => $tabPays,
        ]);
    }
}
