<?php

namespace Modules\Additional\Specifique\Client94\Modules\Facture\Service;

use Helpers\ChampsSupplementaire\ChampSupp;
use Helpers\Outil\Sql;
use Modules\Facture\Repository\GestionFacture;
use Modules\Additional\Specifique\Client94\Modules\Facture\Repository\AjaxFacture;
use PDO;

class AjaxFactureService
{
    public function __construct()
    {
    }
    
    /**
     * updateCsValue
     *
     * @param  PDO $pdo
     * @param  string $codeComp
     * @param  string $numFact
     * @return array<mixed>
     */
    public static function updateCsValue(PDO $pdo, string $codeComp, string $numFact): array
    {
        // récupération des valeurs des CS CODECOMP pour le code complémentaire renseigné
        $sql = new Sql();
        $champsSupp = new ChampSupp($pdo);
        $gestionFacture = new GestionFacture($pdo);
        $ajaxFacture = new AjaxFacture($pdo);
        $cdcCs = [];
        $facLigCs = [];
        for ($i=0; $i < 4; $i++) {
            if ($i != 2) {
                $params = [
                    'typedico'    => 'PARAMGRIM',
                    'codedico'    => 'NCS_CODECOMP_AXE_' . $i,
                    'COD_TAB'     => 'CODECOMP',
                    'COD_ENR'     => '       ' . $codeComp,
                ];
                
                $cdcCs[$i] = $champsSupp::getCSValueSpecific($params, $pdo);
            }
        }

        // Si une valeur de CS est trouvé pour Axe 0 sur le CDC, elle est recopiée en valeur Axe 0 de la ligne de facture.
        if ($cdcCs[0]) {
            $facLigCs[] = [
                'NUM_FIX' => $sql::dilispec($pdo, 'PARAMGRIM', 'NCS_FAC_LIG_AXE_0'),
                'VALEUR' => $cdcCs[0]['VALEUR'] ?? ''
            ];
        }
        
        // Si la valeur du CS Axe 1 du CDC vaut 'ALGO', on va rechercher les valeurs qui alimenteront les CS Axe1 et Axe3 de la ligne de facture dans PARAMDICO :
        if (isset($cdcCs[1]) && $cdcCs[1]['VALEUR'] == 'ALGO') {
            $facEnt = $gestionFacture->getEntetFact($numFact);
            $facLigCsTmp = $ajaxFacture->getCsParamdico($facEnt['CODE_STE'], $facEnt['DATE_FAFO'], $cdcCs[0]['VALEUR']);

            if (!$facLigCsTmp) {
                $facLigCsTmp = [
                    'AXE1'  => $cdcCs[1]['VALEUR'] ?? '',
                    'AXE3'  => $cdcCs[3]['VALEUR'] ?? '',
                ];
            }
        } else {
            // Sinon, on prend les CS axe1 et axe3 du CDC pour les recopier en CS axe1 et axe3 de la ligne de facture
            $facLigCsTmp = [
                'AXE1'  => $cdcCs[1]['VALEUR'] ?? '',
                'AXE3'  => $cdcCs[3]['VALEUR'] ?? '',
            ];
        }

        $facLigCs[1] = [
            'NUM_FIX'   => $sql::dilispec($pdo, 'PARAMGRIM', 'NCS_FAC_LIG_AXE_1'),
            'VALEUR'    => $facLigCsTmp['AXE1']
        ];

        $facLigCs[3] = [
            'NUM_FIX'   => $sql::dilispec($pdo, 'PARAMGRIM', 'NCS_FAC_LIG_AXE_3'),
            'VALEUR'    => $facLigCsTmp['AXE3']
        ];

        return $facLigCs;
    }
}
