<?php declare(strict_types=1);

class Sinistro2_Service_EnviarRelatoriosPagamentosRealizados
{
    const TITLES =  [
        'id_liquidacao' => 'Número da liquidação',
        'id_proposta_mae' => 'Proposta',
        'nr_apolice' => 'Apolice',
        'ds_nome_produto' => 'Nome do produto',
        'ds_nome_proponente' => 'Nome do segurado',
        'cpf_cnpj_proponente' => 'CPF/CNPJ segurado',
        'ds_nome_corretor' => 'Corretor',
        'ds_nome_beneficiario' => 'Nome beneficiário',
        'cpf_cnpj_beneficiario' => 'CPF/CNPJ beneficiário',
        'ds_status' => 'Status',
        'vl_pagamento' => 'Valor do pagamento',
        'dt_agendamento_pagamento' => 'Data de agendamento',
        'dt_pagamento' => 'Data do pagamento'
    ];

    public function executar(string $dataInicio = '', string $dataFim = ''): void
    {
        $hoje = new DateTime();

        if (!empty($dataInicio) && !empty($dataFim)) {
            $inicioSemana = DateTime::createFromFormat('Y-m-d', $dataInicio);
            $fimSemana = DateTime::createFromFormat('Y-m-d', $dataFim);
        } else {
            $inicioSemana = (clone $hoje)->modify('last monday');
		    $fimSemana = (clone $inicioSemana)->modify('+4 days');
        }
        
		$corretores = (new Sistema_Model_Corretores())->getCorretoresPessoaJuridicaAtivos();
		$modelRelatorioSinistro = new Relatorio_Model_Sinistro();
        $csv = new Agro_Plugin_Rs2Csv();

        $csv->setType("application/octet-stream");
        $csv->changeFileName("sinistro_identificacaocredito_corretor.csv");
        $csv->setDisposition("attachment");
        $csv->setTitles(self::TITLES);
        $csv->setSeparator(";");

		foreach ($corretores as $corretor) {
            if (!preg_match('/^\d{2}\.\d{3}\.\d{3}\/\d{4}\-\d{2}$/', $corretor->cpf_cnpj)) {
                continue;
            }
            
			$rs = $modelRelatorioSinistro->relatorioIdentificacaoCredito(
                [],
                (new Produto_Model_Safras())->getSafraAtual('id'),
                [Sinistro2_Model_Liquidacoes::ID_STATUS_INDENIZACAO_PAGA],
                $inicioSemana,
                $fimSemana,
                $corretor->id_usuario,
                true
            );
            
            if (!empty($rs)) {
                $csv->setRecordSet($rs);
                $csv->getCsv(false);

                $this->enviarEmail($corretor, $inicioSemana->format('d/m/Y'), $fimSemana->format('d/m/Y'));
            }
		}
    }

    private function enviarEmail(Sistema_Model_Row_Corretor $corretor, string $dataInicio, string $dataFim): void
    {
		$mail = new Agro_Mail();

		$mail->clearFrom();
        $mail->clearRecipients();

		$mail->setFrom('ti@agrobrasilseguros.com.br', 'Agronet 2.0 - Sistema de noficação');
		$mail->setSubject('Relatório de indenizações pagas');

		$assinatura = Agro_Mail::getAssinatura($mail, 2);

        $content = "Segue listagem das indenizações pagas no período de {$dataInicio} até {$dataFim}.<br><br>";
        $content .= "*Informamos que esse relatório ficará disponível para sua consulta no AgroNet pelo menu: Relatórios > Sinistro > (Relatório de pagamentos)<br><br>";

        $mail->addTo($corretor->ds_email);

        $content .= "<img src=\"cid:{$assinatura->id}\" height=\"102\" width=\"480\" />";
        $content .= Agro_Mail::textoPadraoEmailHtml();

        $mail->setBody($content, 'html');

        $at = $mail->createAttachment(
            file_get_contents(APPLICATION_PATH . '/upload_files/relatorio/sinistro_identificacaocredito_corretor.csv')
        );
        $at->type = 'text/csv';
        $at->disposition = Zend_Mime::DISPOSITION_ATTACHMENT;
        $at->encoding = Zend_Mime::ENCODING_BASE64;
        $at->filename = 'sinistro_identificacaocredito_corretor.csv';
        
        $mail->send();
    }
}