<?php

namespace Helpers\Intuition;

// phpcs:ignoreFile

use Entity\Model\Paravrac;
use Helpers\Outil\Sql;
use Modules\Index\Outil\OutilConnexion;
use Modules\RechercheArticles\Repository\Recherche;

class BaseSynequa
{

    public static $the_session = null;

    var $debug = false;

    protected $CENTRE;

    protected $LANGAGE;

    protected $page_demande;

    /**
     * @var \PDO
     */
    protected $pdo;


    function __construct(\PDO $pdo, $object = null, $page_demande = 1)
    {
        $this->page_demande = $page_demande;

        $this->pdo = $pdo;
        
        // La valeur autodetect permet comme son nom l'indique de laisser la main au moteur de recherche pour la détection du langage utilisé
        // 3369
        $this->LANGAGE = OutilConnexion::getUserIntuitionLanguage($pdo);
    }

    function connect()
    {
        global $elementSynequa;
        
        if (is_null($elementSynequa)) {
            BaseSynequa::$the_session = new iSession();
            if (BaseSynequa::$the_session->connect(array(
                'host' => $_SESSION['INTUITION_SERVER'],
                'port' => $_SESSION['INTUITION_PORT'],
                'database' => $_SESSION['INTUITION_CAT'],
                'user' => $_SESSION['INTUITION_USER'],
                'charset' => '1'
            ))) {
                $elementSynequa = BaseSynequa::$the_session;
                return $elementSynequa;
            } else {
                return null;
            }
        } else {
            BaseSynequa::$the_session = $elementSynequa;
            return $elementSynequa;
        }
    }

    /**
     * Fonction permettant de tester la connexion à Sinequa et de tester si des catalogues sont présents
     */
    public function checkSinequaConnexion()
    {
        try {
            //set_time_limit(10);

            // Si la connexion à Sinequa peut être établie
            if ($this->connect()) {
                //set_time_limit(0);
                // Alors on teste la présence d'article dans le moteur sinequa
                $requete_test = 'select * from cataproc, haplproc, dlibproc, haplstock limit 50 ';
                if ($result = BaseSynequa::$the_session->in_query($requete_test)) {
                    $nb_result = $result->in_num_rows();
                    // Si des lignes sont présentes alors on retourne le code 1.
                    if ($nb_result > 0) {
                        $_SESSION['STATUT_SINEQUA'] = 1;
                        return 1;
                    }                    // Si le moteur sinequa est actif mais sans aucune ligne alors on retourne 0.
                    else {
                        $_SESSION['STATUT_SINEQUA'] = 0;
                        return 0;
                    }
                }
            }            // Si le moteur sinequa est inactif alors on retourne -1.
            else {
                $_SESSION['STATUT_SINEQUA'] = - 1;
                return -1;
            }
        } catch (\Exception $e) {
            return -1;
        }
    }
}
