<?php

namespace Modules\API\APIInterne\OxaMobility\Controller;

use GuzzleHttp\Psr7\Response;
use Modules\API\APIInterne\OxaMobility\Outil\ExportArticle;
use Modules\API\APIInterne\OxaMobility\Outil\TransformXml;
use Helpers\Outil\Roles;

// phpcs:ignore
class STOCKSController extends AbsApiController
{
    public const MAX_RECORD_BY_FILE = 2000;
    public const DISPATCHER_FILE = 1;
    
    /**
     * @return void|Response
     */
    public function init()
    {
        if (($_SESSION["Session_Login"] ?? '') == '') {
            $trad = $this->getTranslationService();

            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Accès refusé.');
            return $this->createApiResponse($return);
        }
    }

    public function REFERENTIELAction() :Response
    {
        $body = $this->request->getMetaBody();
        $return     = [];
        $body['NbLigParFichier'] = (int)$body['NbLigParFichier'] == 0?self::MAX_RECORD_BY_FILE:$body['NbLigParFichier'];
        $trad = $this->getTranslationService();

        if (empty($body['CodeSoc'])) {
            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Le code société est obligatoire');
        } elseif (empty($body['Utilisateur'])) {
            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Le code utilisateur est obligatoire');
        } elseif (empty($body['CodeSite'])) {
            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Le code site est obligatoire');
        } else {
            $exporter = new ExportArticle($this->pdo, $body);

            $return['Statut'] = 'O';
            $return['MsgErreur'] = '';
            $return['CodeSite'] = $body['CodeSite'];

            $dataExport = $exporter->exportArticles();

            $return['NbFichiers'] = $dataExport['nbFile'];
            $return['Fichiers'] = $dataExport['zipFiles'];
        }

        return $this->createApiResponse($return);
    }

    // @codingStandardsIgnoreStart
    public function ENREG_CREATION_BEAction() :Response
    {
        $body = $this->request->getMetaBody();
        $trad = $this->getTranslationService();
        if (Roles::droitsUtilisateur($this->pdo, 'ST_BE_CMV') != '1') {
            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Accès refusé.');
            return $this->createApiResponse($return);
        }

        if (empty($body['CodeSoc'])) {
            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Le code société est obligatoire');
        } elseif (empty($body['Utilisateur'])) {
            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Le code utilisateur est obligatoire');
        } elseif (empty($body['CodeSite'])) {
            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Le code site est obligatoire');
        } else {
            $service = new TransformXml($this->pdo, 'OXAPRC_ENREG_BE');
            $service->creationBon($body, false);

            $responseWsdl = $service->callWsdl();
            $responseXml = $responseWsdl->responseData;
            $responseArray = TransformXml::xmlToArray($responseXml);

            // Check the return of Magic WSDL, if an array is returned it seems than Magic need to be updates
            if (is_bool($responseArray)) {
                $return = [
                    'Statut' => 'E',
                    'MsgErreur' => $trad->t('Une erreur s`est produite lors de l`appel interne. Veuillez recommencer ou contacter l`assistance.'),
                    'NumDoc' => ''
                ];
            } else {
                $return = $service->createJsonForMobile($responseArray);
            }
        }
        return $this->createApiResponse($return);
    }
    
    // @codingStandardsIgnoreStart
    public function ENREG_CREATION_BSAction() :Response
    {
        $body = $this->request->getMetaBody();
        $trad = $this->getTranslationService();

        if (Roles::droitsUtilisateur($this->pdo, 'ST_BS_CMV') != '1') {
            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Vous n\'avez pas les droits pour accéder à cette url.');
            return $this->createApiResponse($return);
        }

        if (empty($body['CodeSoc'])) {
            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Le code société est obligatoire');
        } elseif (empty($body['Utilisateur'])) {
            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Le code utilisateur est obligatoire');
        } elseif (empty($body['CodeSite'])) {
            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Le code site est obligatoire');
        } else {
            $service = new TransformXml($this->pdo, 'OXAPRC_ENREG_BS');
            $service->creationBon($body, false);

            $responseWsdl = $service->callWsdl();
            $responseXml = $responseWsdl->responseData;
            $responseArray = TransformXml::xmlToArray($responseXml);

            // Check the return of Magic WSDL, if an array is returned it seems than Magic need to be updates
            if (is_bool($responseArray)) {
                $return = [
                    'Statut' => 'E',
                    'MsgErreur' => $trad->t('Une erreur s`est produite lors de l`appel interne. Veuillez recommencer ou contacter l`assistance.'),
                    'NumDoc' => ''
                ];
            } else {
                $return = $service->createJsonForMobile($responseArray);
            }
        }

        return $this->createApiResponse($return);
    }

    // @phpcs:ignore
    public function ENREG_CREATION_BTAction() :Response
    {
        $body = $this->request->getMetaBody();
        $trad = $this->getTranslationService();

        if (Roles::droitsUtilisateur($this->pdo, 'ST_BT_CMV') != '1') {
            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Vous n\'avez pas les droits pour accéder à cette url.');
            return $this->createApiResponse($return);
        }

        if (empty($body['CodeSoc'])) {
            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Le code société est obligatoire');
        } elseif (empty($body['Utilisateur'])) {
            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Le code utilisateur est obligatoire');
        } elseif (empty($body['CodeSite'])) {
            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Le code site est obligatoire');
        } else {
            $service = new TransformXml($this->pdo, 'OXAPRC_ENREG_BT', false);
            $service->creationBon($body, false);

            $responseWsdl = $service->callWsdl();
            $responseXml = $responseWsdl->responseData;
            $responseArray = TransformXml::xmlToArray($responseXml);

            // Check the return of Magic WSDL, if an array is returned it seems than Magic need to be updates
            if (is_bool($responseArray)) {
                $return = [
                    'Statut' => 'E',
                    'MsgErreur' => $trad->t('Une erreur s`est produite lors de l`appel interne. Veuillez recommencer ou contacter l`assistance.'),
                    'NumDoc' => ''
                ];
            } else {
                $return = $service->createJsonForMobile($responseArray);
            }
        }

        return $this->createApiResponse($return);
    }

    // @phpcs:ignore
    public function ENREG_CREATION_INV_RESULTATSAction() :Response
    {
        $body = $this->request->getMetaBody();
        $trad = $this->getTranslationService();

        if (Roles::droitsUtilisateur($this->pdo, 'ST_IN_CMV') != '1') {
            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Vous n\'avez pas les droits pour accéder à cette url.');
            return $this->createApiResponse($return);
        }

        if (empty($body['CodeSoc'])) {
            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Le code société est obligatoire');
        } elseif (empty($body['Utilisateur'])) {
            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Le code utilisateur est obligatoire');
        } elseif (empty($body['CodeSite'])) {
            $return['Statut'] = 'E';
            $return['MsgErreur'] = $trad->t('Le code site est obligatoire');
        } elseif (empty($body['NumInv'])) {
            $return['Statut']    = 'E';
            $return['MsgErreur'] = $trad->t('Le numéro d\'inventaire est obligatoire');
        } else {
            $service = new TransformXml($this->pdo, 'OXAPRC_ENREG_INV_RESULTATS', false);
            $service->creationBon($body, false);

            $responseWsdl = $service->callWsdl();
            $responseXml = $responseWsdl->responseData;
            $responseArray = TransformXml::xmlToArray($responseXml);

            // Check the return of Magic WSDL, if an array is returned it seems than Magic need to be updates
            if (is_bool($responseArray)) {
                $return = [
                    'Statut' => 'E',
                    'MsgErreur' => $trad->t('Une erreur s`est produite lors de l`appel interne. Veuillez recommencer ou contacter l`assistance.'),
                    'NumDoc' => ''
                ];
            } else {
                $return = $service->createJsonForMobile($responseArray);
            }
        }
        return $this->createApiResponse($return);
    }
}
