<?php
namespace Helpers\Environnement\Recette;

use Helpers\Fichier\Fichier;

class Traduction
{

    
    /**
     * getNameFileNoTrad
     *
     * @return string
     */
    public static function getNameFileNoTrad() : string
    {
        return 'TextNoTradInBDD.txt';
    }
    
    /**
     * setFileNoTrad
     *
     * @param  string $codeProduit
     * @return void
     */
    public static function setFileNoTrad($codeProduit) : void
    {
        if ($_SESSION['environnement'] == 'nonregression') {
            $texte = $_SESSION['trash']['TRAD-ABS-FOR-NONREG'];
            $content = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].' ('.$codeProduit.') connect with '.$_SESSION['Session_Login'].' at '.date('d/m/Y H:i')."\n\r";
            $content .="\t\t\t".implode("\n\t\t\t", $texte)."\n\r\n\r\n\r";

            Fichier::createFichierTmp(\Helpers\Environnement\Recette\Traduction::getNameFileNoTrad(), $content, 'a+');
            unset($_SESSION['trash']['TRAD-ABS-FOR-NONREG']);
        }
    }
    
    /**
     * getTextATrad
     *
     * @param  string $text
     * @param  string $codeProduit
     * @param  \PDO $pdo
     * @return bool
     */
    public static function getTextATrad(string $text, string $codeProduit, \PDO $pdo) : bool
    {

        $req = "SELECT TOP 1 TXT
        FROM TXTATRAD with (nolock)
        WHERE COD_PROD=:codeProduit 
        AND TXT = :text";

        $arrayReq = [ ':codeProduit' => $codeProduit, ':text' => $text];
        
        $traduction = $pdo->prepare($req);
        $traduction->execute($arrayReq);

        if (count($traduction->fetch(\PDO::FETCH_ASSOC))) {
            return true;
        }

        return false;
    }
    
    /**
     * getTextATrad
     *
     * @param  array<mixed> $texts
     * @param  string $codeProduit
     * @param  \PDO $pdo
     * @return array<mixed>
     */
    public static function getTextATradMultiple(array $texts, string $codeProduit, \PDO $pdo) : array
    {
        $i = 0;
        $req = "SELECT TXT
        FROM TXTATRAD with (nolock)
        WHERE COD_PROD=:codeProduit 
        AND ( ";

        $arrayReq[':codeProduit'] = $codeProduit;

        foreach ($texts as $txt) {
            if ($i!=-0) {
                $req .=' OR';
            }
            $arrayReq[':TXT'.$i] = $txt;
            $req .=" TXT = :TXT".$i;
            $i++;
        }

        $req .=")";
        
        $traduction = $pdo->prepare($req);
        $traduction->execute($arrayReq);
        $return = $traduction->fetchAll(\PDO::FETCH_ASSOC);
    
        if ($return) {
            return $return;
        } else {
            return [];
        }
    }

    /**
     * @return string[]|bool
     */
    public static function getTradByTerm(
        \PDO $pdo,
        string $codeProduit,
        string $codeLang,
        string $term
    ) {
         // TODO : move code to repo ?
         $req = "SELECT TXTATRAD.TXT, TXTTRAD.TRAD
         FROM TXTATRAD with (nolock)
         LEFT JOIN TXTTRAD with (nolock) ON TXTTRAD.TXT = TXTATRAD.TXT
             AND TXTTRAD.COD_PROD = TXTATRAD.COD_PROD
             AND TXTTRAD.COD_LNG = :lang
         WHERE TXTATRAD.COD_PROD = :codeProduit AND TXTATRAD.TXT = :term";
     
        $stmt = $pdo->prepare($req);
        $stmt->execute([
            ':lang' => $codeLang,
            ':codeProduit' => $codeProduit,
            ':term' => $term,
        ]);

        return $stmt->fetch(\PDO::FETCH_ASSOC);
    }

    public static function getAllTradBatch(
        \PDO $pdo,
        string $codeProduit,
        string $codeLang,
        callable $fnProcess
    ) :void {

        // TODO : move code to repo ?
        $req = "SELECT TXTATRAD.TXT, TXTTRAD.TRAD
            FROM TXTATRAD with (nolock)
            LEFT JOIN TXTTRAD with (nolock) ON TXTTRAD.TXT = TXTATRAD.TXT
                AND TXTTRAD.COD_PROD = TXTATRAD.COD_PROD
                AND TXTTRAD.COD_LNG = :lang
            WHERE TXTATRAD.COD_PROD = :codeProduit";
        
        $stmt = $pdo->prepare($req);
        $stmt->execute([
            ':codeProduit' => $codeProduit,
            ':lang' => $codeLang,
        ]);

        while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
            $fnProcess($row);
        }
    }
}
