<?php

namespace Modules\Facture\WebService;

use Helpers\Webservice\Wsdl;

class GestionFacture
{
    
    public static function litige($numFacture, $commentaire, $mode)
    {
        \Helpers\Webservice\Wsdl::XmlEntities($array);
        
        $xml =  '<LitigeBAPIn LngUtilisation="'.htmlspecialchars($_SESSION['Session_Langue']).'">
                    <Utilisateur>'.$_SESSION['Session_Login'].'</Utilisateur>
                    <Mode>'.$mode.'</Mode> <!-- valeurs possibles : "L" pour mise en litige, "S" pour suppression du litige -->
                    <NumFact>'.$numFacture.'</NumFact>
                    <Comment>'.htmlspecialchars($commentaire).'</Comment>
                </LitigeBAPIn>';
        
        return new \Helpers\Webservice\Wsdl('Oxaproc_Gen.wsdl', 'OXAPRC_LITIGEBAP', $xml, false);
    }
    
    public static function supprimer($numFacture)
    {
        \Helpers\Webservice\Wsdl::XmlEntities($array);
        
        $xml =  '<FactureSupprime_In LngUtilisation="'.htmlspecialchars($_SESSION['Session_Langue']).'">
                    <Utilisateur>'.$_SESSION['Session_Login'].'</Utilisateur>
                    <NUM_FACT>'.$numFacture.'</NUM_FACT>
                </FactureSupprime_In>';
        
        return new \Helpers\Webservice\Wsdl('Oxaproc_Gen.wsdl', 'OXAPRC_FACT_SUPPRESSION', $xml, false);
    }

    /**
     * Undocumented function
     *
     * @param array<mixed> $array
     * @return Wsdl
     */
    public function signatureFacture($array)
    {
        //   <MotdePasse></MotdePasse>
        $envoi =
        '<SigBAPIn LngUtilisation="'.$_SESSION['Session_Langue'].'">
            <Utilisateur>'.htmlentities($_SESSION['Session_Login']).'</Utilisateur>
            <UserConnecte>' . (array_key_exists("MODE_BACKUP", $_SESSION) && $_SESSION['MODE_BACKUP'] ? $_SESSION['user_origine'] : $_SESSION['Session_Login']) . '</UserConnecte>
            <MotdePasse>'.htmlentities($array['MotdePasse']).'</MotdePasse>
            <Mode>'.$array['Mode'].'</Mode>
            <NumFact>'.$array['NumFact'].'</NumFact>
            <Signataire>'.$array['Signataire'].'</Signataire>
            <Comment>'.($array['Comment'] ?? '').'</Comment>';
        
        if (isset($array['NvSignataire'])) {
            $envoi .= '<NvSignataire>'.$array['NvSignataire'].'</NvSignataire>';
        }
        
        // TODO SIGN_SPECIF_BOEH_INVEST ??
        

            $envoi .='<Confirm>'.($array['Confirm'] ?? 'false').'</Confirm>';
        
        // TODO ??
        // Si le champ lié à la notation fournisseur existe alors on l'ajoute au wsdl de signature
        // if (! is_null($this->notation_fournisseur))
        //     $envoi .= "<SPECIFCLIENT>{$this->notation_fournisseur}</SPECIFCLIENT>";

        $envoi .= '</SigBAPIn>';
        
        return new \Helpers\Webservice\Wsdl('', 'OXAPRC_SIGNBAP', $envoi, false);
    }

    /**
     * @param array<string> $listFacId
     * @param array<string> $post
     */
    public function signatureMultiFac(string $motDePasse, string $mode, string $signataire, array $listFacId, bool $confirm, string $comment = '', $post = []) :Wsdl
    {
        $envoi = '<SigBAPIn LngUtilisation="'.$_SESSION['Session_Langue'].'">
            <Utilisateur>'.$_SESSION['Session_Login'].'</Utilisateur>
            <UserConnecte>' . (array_key_exists("MODE_BACKUP", $_SESSION) && $_SESSION['MODE_BACKUP'] ? $_SESSION['user_origine'] : $_SESSION['Session_Login']) . '</UserConnecte>
            <MotdePasse>'.\htmlspecialchars($motDePasse, ENT_XML1, 'UTF-8').'</MotdePasse>
            <Mode>'.\htmlspecialchars($mode, ENT_XML1, 'UTF-8').'</Mode>
            <MultiFact>true</MultiFact>
            <ListeFact>
                '.join('', array_map(function ($fac) {
                    return '<Fact>
                        <NumFact>'.\htmlspecialchars($fac, ENT_XML1, 'UTF-8').'</NumFact>
                    </Fact>';
        }, $listFacId)).'
            </ListeFact>
            <Signataire>'.\htmlspecialchars($signataire, ENT_XML1, 'UTF-8').'</Signataire>
            <Comment>'.\htmlspecialchars(($comment), ENT_XML1, 'UTF-8').'</Comment>
            <Confirm>'.($confirm ? 'true' : 'false').'</Confirm>
        </SigBAPIn>';
        
        return new Wsdl('', 'OXAPRC_SIGNBAP', $envoi, false, true);
    }
}
