<?php

namespace Helpers\Supervision;

use Helpers\Outil\Outils;
use Modules\Panier\Repository\PanierEntete;

class Supervision
{

    
    public static string $page_php               = 'supervision.php';

    /**
     *  Fonction appeler dans le controller GlobalApplication\OutilController::SupervisionAction()
     */
    public static function mesureTraitement(string $heureFin) :void
    {
        
        $data = $_SESSION['supervision']??[];

        if (isset($data['heureDebut']) && $heureFin) {
            $envoi = '<OXAAgent_Record_In LngUtlisation="">
                    	<Utilisateur>'.($data['idUser']??'').'</Utilisateur>
                    	<TypeTraitement>'.($data['type']??'').'</TypeTraitement>
                    	<HeureDebut>'.($data['heureDebut']??'').'</HeureDebut>
                    	<HeureFin>'.($heureFin).'</HeureFin>
                    	<RefObjet>'.($data['refObjet']??'').'</RefObjet>
                    	<NbLignesObjet>'.($data['nbLigneObjet']??'').'</NbLignesObjet>
                    	<CodeCtrEmetteur>'.($data['codeSectionImputation']??'').'</CodeCtrEmetteur>
                    	<CodeCtrLivraison>'.($data['codeCtrLivraison']??'').'</CodeCtrLivraison>
                    	<CodeSociete>'.($data['codeSociete']??'').'</CodeSociete>
                    	<CodeSectionImputation>'.($data['codeSectionImputation']??'').'</CodeSectionImputation>
                    	<NbExemplaires></NbExemplaires>
                    	<TexteRecherche>'.($data['texteRecherche']??'').'</TexteRecherche>
                    	<Catalogue>'.($data['catalogue']??'').'</Catalogue>
                    	<NombreResultatRecherche>'.($data['nbResultat']??'').'</NombreResultatRecherche>
                    	<NomFichier>'.($data['nomFichier']??'').'</NomFichier>
                      </OXAAgent_Record_In>
                    ';
            
            new \Helpers\Webservice\Wsdl('', 'OXAPRC_SUPERV_ENVOI_RESULTAT', $envoi, false);
        }
        unset($_SESSION['supervision']);
    }
    
    /**
     * A placer au debut du traitement
     */
    public static function setHeureDebut() :void
    {
        $_SESSION['supervision']['heureDebut']=date('His');
    }
    
    public static function setIdUser(mixed $user) :void
    {
        $_SESSION['supervision']['idUser']=$user;
    }
    
    /**
     * Attention pour le moment uniquement la connexion est appeler par ce fichier, tout le reste est appeler par la V1.
     *
     *   SP Soumission d'un Panier
     *   VP Validation d'un Panier
     *   IL Identification Login
     *   RTL    Recherche « Texte Libre »
     *   IFCSV  Importation Fichier CSV
     */
    public static function setTypeTraitement(mixed $type) :void
    {
        $_SESSION['supervision']['type']=$type;
    }
    
    public static function setRefObjet(mixed $value) :void
    {
        $_SESSION['supervision']['refObjet']=$value;
    }
    
    /**
     * @param mixed $generiq
     * @param mixed $ssFamille
     * @param mixed $catalogue
     * @param mixed $commande
     */
    public static function setNbResultat($generiq = 0, $ssFamille = 0, $catalogue = 0, $commande = 0) :void
    {
        $value = 'G : '.$generiq.' , SF : '.$ssFamille.' , C : '.$catalogue.' , H : '.$commande;
        $_SESSION['supervision']['nbResultat']=$value;
    }
    
    public static function setCodeCtrEmetteur(mixed $value) :void
    {
        $_SESSION['supervision']['codeCtrEmetteur']=$value;
    }
    
    public static function setCodeCtrLivraison(mixed $value) :void
    {
        $_SESSION['supervision']['codeCtrLivraison']=$value;
    }
    
    public static function setCodeSociete(mixed $value) :void
    {
        $_SESSION['supervision']['codeSociete']=$value;
    }
    
    public static function setCodeSectionImputation(mixed $value) :void
    {
        $_SESSION['supervision']['codeSectionImputation']=$value;
    }
    
    public static function setTexteRecherche(mixed $value) :void
    {
        $_SESSION['supervision']['texteRecherche']=$value;
    }
    
    public static function setCatalogue(mixed $listeValue) :void
    {
        $value = implode(',', $listeValue);
        $_SESSION['supervision']['catalogue']=$value;
    }
    
    public static function setNbLigneObjet(mixed $value) :void
    {
        $_SESSION['supervision']['nbLigneObjet'] = $value;
    }
    
    public static function setNomFichier(mixed $value) :void
    {
        $_SESSION['supervision']['nomFichier']=$value;
    }
    
    public static function executionAsynchrone(string $url, bool $addHost = false) :void
    {

        if ($addHost) {
            $url = Outils::getRootUrl() . $url;
        }

        $ch = curl_init();
        
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_COOKIESESSION, true);
        curl_setopt($ch, CURLOPT_TIMEOUT_MS, 10);
        curl_setopt($ch, CURLOPT_COOKIE, session_name() . '=' . session_id());
        curl_setopt($ch, CURLOPT_URL, $url);
        session_write_close();
        curl_exec($ch);
        
        curl_close($ch);
        
        session_set_cookie_params([
            'path' => '/',
            //'secure' => true,
            //'httponly' => true,
            'samesite' => 'None'
        ]);
        if (session_status() != PHP_SESSION_ACTIVE) {
            if (Outils::isHttps()) {
                session_set_cookie_params(["samesite" => "None", 'Secure' => true]);
            }
            session_name('__OxaProc-PHPSESSID');
            session_start();
        }
    }

    /**
     * @param string $recherche
     * @param array<mixed> $infoPanier
     */
    public static function initRechercheArticle(\PDO $pdo, $recherche = '', $infoPanier = []) : void
    {
        if (!$infoPanier) {
            $panierEntete = new PanierEntete($pdo);
            $infoPanier = $panierEntete->getEntetePanier($_SESSION['id_panier'], $_SESSION['id_user']);
        }

        self::setHeureDebut();
        self::setIdUser($_SESSION['Session_Login']);
        self::setTypeTraitement('RTL');
        self::setTexteRecherche($recherche);
        self::setRefObjet($_SESSION['id_panier']);
        self::setCodeSociete($_SESSION['Session_SocUsr']);
        self::setCodeSectionImputation($_SESSION['Session_SectionImputation']??'');
        
        self::setCodeCtrEmetteur($infoPanier['CENTRE_EMETTEUR']);
        self::setCodeCtrLivraison($infoPanier['LIV_CTR']);
    }
}
