<?php

namespace Modules\Catalogue\Validator;

use Helpers\Trad\ITrad;
use Helpers\Validator\Validator;

class VersionCatalogueExterneValidator extends Validator
{

    /**
     * @var array<mixed>
     */
    private array $post;

    /**
     * @var array<mixed>
     */
    private array $infoParam;

    public function __construct(\PDO $pdo, ITrad $trad)
    {
        $this->pdo = $pdo;
        $this->trad = $trad;
    }

    /**
     * @param array<mixed> $post
     * @return void
     */
    public function controleVersion(&$post, string $idVersion):void
    {
        $this->post = &$post;

        foreach ($this->post as $k => $v) {
            if (str_ends_with($k, $idVersion)) {
                $this->post[str_replace($idVersion, '', $k)] = $v;
                unset($this->post[$k]);
            }
        }

        $this->tabObjet();
        $this->tabFichier();
        $this->tabPlannification();

        $this->isCheck($post['CHRGACTIF']);

        if ($this->infoParam['TYPDATAS'] == 'cXML' || $this->infoParam['TYPDATAS'] == 'OCI') {
            $this->tabPunchout();
        }

        if ($this->infoParam['TYPECATA'] == 'R') {
            $this->tabRemise();
        }
    }

    /**
     * @param array<mixed> $arrayParam
     */
    public function setInfoParam($arrayParam):void
    {
        $this->infoParam = $arrayParam;
    }

    private function tabObjet():void
    {
        $this->isStringAvecEspace($this->trad->t('Nom du fichier'), $this->post['Fichier_a_charger'], 0, 255);
        $this->isStringSansEspace($this->trad->t('Séparateur champs'), $this->post['SEPARATE'], 0, 1);
        //$this->post['SETDECIM'];
        $this->isInteger($this->trad->t('Nombre de lignes à sauter'), $this->post['NBLGSTER'], 0, 4);
    }

    private function tabFichier():void
    {
        if ($this->post['METHCHRG']) {
            $this->isStringAvecEspace($this->trad->t('Changement BULK : Fichier script'), $this->post['FSCRBULK'], 0, 255);
            $this->isStringAvecEspace($this->trad->t('Changement BULK : Fichier format'), $this->post['FFMTBULK'], 0, 255);
        }
        //MODECHRG
        if ($this->post['TRTREJETS']) {
            $this->isStringAvecEspace($this->trad->t('Traitement des rejets : Nom du fichier'), $this->post['FICHREJET'], 0, 255);
        }
        
        if ($this->post['NIVOLOG'] == 'D' || $this->post['NIVOLOG'] == 'R') {
            $this->isStringAvecEspace($this->trad->t('Gestion des logs : Nom du fichier'), $this->post['FICHLOG'], 0, 255);
        }
    }

    private function tabPlannification():void
    {
        $this->isInteger($this->trad->t('Périodicité des traitements : A déclencher tous les'), $this->post['PERIOVAL'], 0, 4);
        //PERIOTYP
        $this->isDate($this->post['DATEDEB'], '', '', true, $this->trad->t('Périodicité des traitements : date'));
        $this->isHourWithSeconde($this->trad->t('Périodicité des traitements : heure'), $this->post['HEUREDEB']);
        $this->post['HEUREDEB'] = str_replace(':', '', $this->post['HEUREDEB']);
    }

    private function tabPunchout():void
    {
        $this->isStringAvecEspace($this->trad->t('URL de connexion'), $this->post['URL_CONNECT'], 0, 300);
        //MODEPLOY

        if ($this->infoParam['TYPDATAS'] == 'cXML') {
            $this->isStringAvecEspace($this->trad->t('Identifiant du serveur Ariba'), $this->post['IDSRVARIBA'], 0, 300);
            $this->isStringAvecEspace($this->trad->t('Identifiant du fournisseur PunchOut (SharedSecret)'), $this->post['IDFOURPUNCH'], 0, 300);
    
            $this->isStringAvecEspace($this->trad->t('URL du site fournisseur pour soumission de commande électronique'), $this->post['URLSITEFOUR'], 0, 300);
        } elseif ($this->infoParam['TYPDATAS'] == 'OCI') {
            $this->isFloat($this->trad->t('Version OCI'), $this->post['VERSION_OCI']);
        }
    }

    private function tabRemise():void
    {
        $this->isStringAvecEspace($this->trad->t('Fichier des remises'), $this->post['NOMFICH'], 0, 255);
    }
}
