<?php

namespace Modules\Additional\Specifique\Client37\Modules\Signature\Service;

use Helpers\ChampsSupplementaire\ChampSupp;
use Helpers\Trad\ITrad;

class WorkflowSpecifique
{
    /**
     * Undocumented function
     *
     * @param ITrad $trad
     * @param array<mixed> $post
     * @return void|array<string>
     */
    public static function validatorSpecifique(ITrad $trad, $post, bool $validation = false)
    {
        if ($validation) {
            if ($post['NvSignataire'] == '') {
                return [
                    'error' => $trad->t('Un signataire n\'est pas renseigné.'),
                ];
            }
        } else {
            $listeSelect = $post['NvSignataire'];
            foreach ($listeSelect as $k => $select) {
                if ($select == '') {
                    return [
                        'error' => $trad->t('Un signataire n\'est pas renseigné.'),
                    ];
                }
            }
        }
    }

    /**
     * @param mixed $algoSpec
     * @return string
     */
    public static function strReplaceSpecif($algoSpec = null):string
    {
        return str_replace("\r\n", 'xxRCxx', (string)$algoSpec);
    }

    public static function doubleBranchePresent(?string $algoSpec = null) : bool
    {
        if (!$algoSpec) {
            return false;
        }

        if (strpos($algoSpec, "\r\n")) {
            return true;
        }

        return false;
    }
    
    /**
     * @param string $algospec
     * @return array<mixed>
     */
    public static function getLstSignataire($algospec)
    {
        // On split sur le CR LF en premier
        /*
         * 1 CHA000000000000614|0||0||0||0|1
         * xxRCxx
         * 2 RA;ANOUN Richard;VAL
         * xxRCxx
         * 3 JLA;Jeanine Lasry;VAL
         * xxRCxx
         * 4 LP;PEHU Laurent;VAL
         * xxRCxx
         * 5 LZH;Léo ZHAO;VAL
         */
        $array_retour = [];
        $structure = explode("\r\n", $algospec);
        
        if (count($structure) > 2 && $structure[3] != '') {
            $debut = 3; // 3eme ligne
        } else {
            $debut = 2; // 2eme ligne
        }
                        
        // A partir de la troisieme ligne
        for ($icpt = ($debut - 1); $icpt < count($structure); $icpt ++) {
            // On split maintenant sur le pipe
            if ($structure[$icpt] == '') {
                continue;
            }
            $liste = explode('|', $structure[$icpt]);
            
            // seul le premier signataire doit etre pris en compte
            for ($icpt1 = 0; $icpt1 < count($liste); $icpt1 ++) {
                @list ($code, $nom, $role) = explode(';', $liste[$icpt1]);
                // Si le rôle du signataire est VAL uniquement
                if (strtoupper($role) == 'VAL' || strtoupper($role) == 'INC') {
                    // Respect de la xsd relative à la save Oxaproc_paniervalidin.xsd
                    $array_retour[$code] = $nom;
                    break; // seul le premier signataire est a prendre en compte
                }
            }
        }

        return $array_retour;
    }
}
