<?php

use Mpdf\Mpdf;

class Sinistro2_Service_AvisoSinistro
{
    public function getDadosAvisoPropostaRecusada(int $idAviso): array
    {
        $informacoes = (new Sinistro2_Model_AvisosSinistro())->getDadosAvisoPropostaRecusada(
            [
                'sp.id as id_proposta',
                'spp.ds_nome_proponente as nome_proponente',
                'sp.nr_apolice as numero_apolice',
                'pp.ds_nome_produto as nome_produto',
                "to_char(sa.dt_criacao, 'DD/MM/YYYY'::text) as data_aviso",
                'pe.ds_nome_evento as nome_evento',
                "to_char(sa.dt_sinistro, 'DD/MM/YYYY'::text) as data_evento",
                "to_char(sa.dt_sinistro, 'HH24:MI:SS'::text) as hora_evento",
                'saes.ds_email_segurado as email_segurado',
                'sc.ds_email as email_corretor',
                'sar.ds_motivo_recusa as observacao_recusa',
                'atrs.ds_tipo_recusa as motivo_recusa',
                "to_char(sar.dt_criacao, 'DD'::text) as dia_recusa",
                "to_char(sar.dt_criacao, 'MM'::text) as mes_recusa",
                "to_char(sar.dt_criacao, 'YYYY'::text) as ano_recusa",
                "to_char(sar.dt_criacao, 'DD/MM/YYYY HH24:MI:SS'::text) as data_recusa",
                "su.ds_nome_usuario as nome_usuario",
                "sa.id as id_aviso",
            ],
            ["sa.id = {$idAviso}"]
        );

        if (empty($informacoes)) {
            throw new Zend_Exception('Informações do aviso não encontradas.');
        }

        return $informacoes->toArray();
    }

    public function enviarEmailRecusa(int $idAviso): bool
    {
        try {
            $informacoes = $this->getDadosAvisoPropostaRecusada($idAviso);
            $assunto = "Aviso de Sinistro nº {$idAviso}";
            $corpo = $this->renderizarInformacoesComunicadoRecusa($informacoes);

            $mail = new Agro_Mail();
            $mail->inicioTextoPadrao(false);
            $mail->setBodyHtml($corpo);
            $mail->addTo($informacoes['email_segurado']);
            $mail->addCc($informacoes['email_corretor']);
            $mail->setSubject($assunto);
            $mail->send();
        } catch (Throwable $erro) {
            return false;
        }

        return true;
    }

    /**
     * @param int $idAviso
     * @return void
     * @throws Zend_Exception
     * @throws \Mpdf\MpdfException
     */
    public function gerarPdfRecusa(int $idAviso): void
    {
        $mpdf = new Mpdf([
            'tempDir' => APPLICATION_PATH . '/upload_files/temp',
            'margin_top' => 10,
            'margin_bottom' => 25,
            'setAutoTopMargin' => 'pad',
        ]);

        $diretorio = APPLICATION_PATH . '/upload_files/aviso_sinistro_recusa';
        if (!file_exists($diretorio)) {
            mkdir($diretorio, '0755', true);
        }

        $informacoes = $this->getDadosAvisoPropostaRecusada((int)$idAviso);
        $conteudo = $this->renderizarInformacoesComunicadoRecusa($informacoes);

        $html = '<iframe class="hide" width="0" frameborder="0" marginwidth="0" height="0" marginheight="0" id="hiddenFrame" name="hiddenFrame"></iframe>';
        $html .= '<div class="container">';
        $html .= '   <div class="content">';
        $html .= '     <div style="padding-bottom: 10px">';
        $html .= $conteudo;
        $html .= '    </div>';
        $html .= '  </div>';
        $html .= '</div>';
        $html = str_replace("/resources/", $_SERVER['DOCUMENT_ROOT'] . "/resources/", $html);


        $mpdf->SetHTMLHeader('
            <div style="width:100%;">
                <img src="/resources/imagens/essor_cabecalho.png"/>
                <hr>
            </div>
        ');

        $mpdf->WriteHTML($html, \Mpdf\HTMLParserMode::HTML_BODY);

        $mpdf->SetHTMLFooter('
          <div style="text-align:center;">
            <hr>
            <img src="/resources/imagens/essor_rodape.png"/>
          </div>
        ');

        $mpdf->Output("{$idAviso}_comunicado_aviso_recusado.pdf", \Mpdf\Output\Destination::DOWNLOAD);
    }

    private function renderizarInformacoesComunicadoRecusa(array $informacoes)
    {
        $nomeProponente = explode(" ", $informacoes['nome_proponente']);
        $mesExtenso = strtolower(Agro_Util::MAP_DESCRICAO_MES[$informacoes['mes_recusa']]);
        $motivoRecusa = $informacoes['motivo_recusa'];

        if (!empty(trim($informacoes['observacao_recusa']))) {
            $motivoRecusa .= " - {$informacoes['observacao_recusa']}";
        }

        return (new Agro_TemplateRenderer())->renderizar(
            'sinistro/comunicado_recusa.html.tpl',
            [
                'dia_recusa' => $informacoes['dia_recusa'],
                'mes_extenso' => $mesExtenso,
                'ano_recusa' => $informacoes['ano_recusa'],
                'nome_proponente' => trim($nomeProponente[0]),
                'id_proposta' => $informacoes['id_proposta'],
                'numero_apolice' => $informacoes['numero_apolice'],
                'nome_produto' => $informacoes['nome_produto'],
                'id_aviso' => $informacoes['id_aviso'],
                'data_aviso' => $informacoes['data_aviso'],
                'nome_evento' => $informacoes['nome_evento'],
                'data_evento' => $informacoes['data_evento'],
                'hora_evento' => $informacoes['hora_evento'],
                'motivo_recusa' => $motivoRecusa,
            ]
        );
    }
}