<?php declare(strict_types=1);

class Sinistro2_Service_TransmitirArquivoEssor
{
    public function executar(
        int $idProcesso,
        int $idArquivo,
        int $idTipoArquivo,
        string $filename,
        string $fullFilename
    ) : array {
        $wsdl = (APPLICATION_ENV != 'production') ? WSDL_DEV : WSDL_PROD;
        $client = new SoapClient($wsdl);

        $modelProcesso = new Sinistro2_Model_Processos();
        $tipoArquivoProcessos = (new Sistema_Model_TipoArquivoProcesso())->find($idTipoArquivo)->current();
        $nm_chave_valores = $modelProcesso->getIdentificadorSeguradora($modelProcesso->getPropostaByProcesso($idProcesso));
        $base64file = base64_encode(file_get_contents($fullFilename));

        $args = array(
            'Executar' => array(
                'Servico' => 'InserirDocumentoECM',
                'conteudoXML' => '<i4proerp>
                                    <inserirecmws
                                        id_tp_documento="'.$tipoArquivoProcessos->id_tipo_documento_seguradora.'"
                                        id_dominio="4"
                                        nm_chave_valores="'.$nm_chave_valores.'"
                                        img_documento_arquivo="'.$filename.'"
                                        cd_usuario="AgroBrasil WS"
                                        cd_empresa="230"
                                        img_documento_content_type="'.mime_content_type($fullFilename).'"
                                        nm_observacao="'.$tipoArquivoProcessos->ds_tipo_arquivo.'"
                                        nr_ref="'.$nm_chave_valores.'"
                                        img_documento="'.$base64file.'"
                                    />
                                </i4proerp>'
            )
        );

        $result = $client->__soapCall('Executar', $args, array('location' => explode('?', $wsdl)[0]));

        if ($result->ExecutarResult) {
            
            $convertedString = mb_convert_encoding($result->ExecutarResult, 'UTF-8', 'ISO-8859-1');
            $result_xml  = simplexml_load_string($convertedString, 'SimpleXMLElement', LIBXML_NOCDATA);

            if ($result_xml->sucesso->attributes()->cd_retorno > 0) {
                return ['status' => false, 'message' => $result_xml->sucesso->attributes()->nm_retorno];
            } else {
                $logSinistroArquivosTransmissao = new Log_Model_LogSinistroArquivosTransmissao();
                $dados['id_processo'] = $idProcesso;
                $dados['id_arquivo'] = $idArquivo;
                $dados['id_documento_seguradora'] = $result_xml->sucesso->attributes()->id_documento;
                $dados['ds_mensagem'] = $result_xml->sucesso->attributes()->nm_retorno;
                
                if ($logSinistroArquivosTransmissao->save($dados)) {
                    return ['status' => true, 'message' => 'Transmissão do arquivo para ESSOR efetuada com sucesso.'];
                }
            }
        }

        return ['status' => false, 'message' => 'Erro na transmissão do arquivo para ESSOR.'];
    }
}