<?php

declare(strict_types=1);

class Atendimento_Service_Htmlavisomoderacaonegocio
{
    const TEMPLATE_AVISO = '
        <table width="100%" border="0" style="height: 3em;background-color: %BACKGROUND%; font-weight: bold">
            <tr valign="center">
            <td align="center">
                <font color="white">Existe análise de Moderação de Negócio para %ALVOS% para esse seguro. Por favor, entre em contato com o dpto técnico antes de aceitar a proposta.</font>
            </td>
            </tr>
        </table><br>';

    private function setRestricoesProponente(int $idProponente, int $idProposta, array &$avisos): void
    {
        $restricoesProponente = (new Seguro_Model_ProponentesRestricoesTecnicas())->findRestricoes(
            $idProponente,
            $idProposta,
            true
        );

        foreach ($restricoesProponente as $restricao) {
            if ($restricao['id_orientacao_restricao_tecnica'] == Seguro_Model_OrientacaoRestricaoTecnica::ACEITAR_DIRETO) {
                $avisos[Seguro_Model_OrientacaoRestricaoTecnica::ACEITAR_DIRETO]['Proponente'] = true;
            } elseif ($restricao['id_orientacao_restricao_tecnica'] == Seguro_Model_OrientacaoRestricaoTecnica::NEGAR_DIRETO) {
                $avisos[Seguro_Model_OrientacaoRestricaoTecnica::NEGAR_DIRETO]['Proponente'] = true;
            } elseif (
                $restricao['id_orientacao_restricao_tecnica']
                    == Seguro_Model_OrientacaoRestricaoTecnica::ANALISAR_INDIVIDUALMENTE
            ) {
                $avisos[Seguro_Model_OrientacaoRestricaoTecnica::ANALISAR_INDIVIDUALMENTE]['Proponente'] = true;
            }
        }
    }

    private function setRestricoesBeneficiarios(array $idsBeneficiarios, int $idProposta, array &$avisos): void
    {
        $restricoesBeneficiarios = (new Seguro_Model_BeneficiarioRestricaoTecnica())
                ->findRestricoesByIdsBeneficiarios($idsBeneficiarios, $idProposta);
            
        foreach ($restricoesBeneficiarios as $restricao) {
            if ($restricao['id_orientacao_restricao_tecnica'] == Seguro_Model_OrientacaoRestricaoTecnica::ACEITAR_DIRETO) {
                $avisos[Seguro_Model_OrientacaoRestricaoTecnica::ACEITAR_DIRETO]['Beneficiário'] = true;
            } elseif ($restricao['id_orientacao_restricao_tecnica'] == Seguro_Model_OrientacaoRestricaoTecnica::NEGAR_DIRETO) {
                $avisos[Seguro_Model_OrientacaoRestricaoTecnica::NEGAR_DIRETO]['Beneficiário'] = true;
            } elseif (
                $restricao['id_orientacao_restricao_tecnica'] 
                    == Seguro_Model_OrientacaoRestricaoTecnica::ANALISAR_INDIVIDUALMENTE
            ) {
                $avisos[Seguro_Model_OrientacaoRestricaoTecnica::ANALISAR_INDIVIDUALMENTE]['Beneficiário'] = true;
            }
        }
    }

    private function setRestricoesPropriedade(int $idProposta, array &$avisos): void
    {
        $modelPropriedadeCarRestricao = new Seguro_Model_PropriedadeCarRestricao();
        $restricoesPropriedade = $modelPropriedadeCarRestricao->findRestricoesByIdProposta($idProposta);
        
        foreach ($restricoesPropriedade as $restricao) {
            if ($restricao['id_orientacao_restricao_tecnica'] == Seguro_Model_OrientacaoRestricaoTecnica::ACEITAR_DIRETO) {
                $avisos[Seguro_Model_OrientacaoRestricaoTecnica::ACEITAR_DIRETO]['Propriedade'] = true;
            } elseif ($restricao['id_orientacao_restricao_tecnica'] == Seguro_Model_OrientacaoRestricaoTecnica::NEGAR_DIRETO) {
                $avisos[Seguro_Model_OrientacaoRestricaoTecnica::NEGAR_DIRETO]['Propriedade'] = true;
            } elseif (
                $restricao['id_orientacao_restricao_tecnica'] 
                    == Seguro_Model_OrientacaoRestricaoTecnica::ANALISAR_INDIVIDUALMENTE
            ) {
                $avisos[Seguro_Model_OrientacaoRestricaoTecnica::ANALISAR_INDIVIDUALMENTE]['Propriedade'] = true;
            }
        }
    }

    public function getHtml(
        int $idProposta,
        int $idProponente,
        ?array $idsBeneficiarios
    ): string {
        $avisos = [];
        
        $this->setRestricoesProponente($idProponente, $idProposta, $avisos);

        if ($idsBeneficiarios) {
            $this->setRestricoesBeneficiarios($idsBeneficiarios, $idProposta, $avisos);
        }

        $this->setRestricoesPropriedade($idProposta, $avisos);

        $htmlAviso = '';

        foreach ($avisos as $idOrientacaoRestricaoTecnica => $aviso) {
            $alvos = '';

            foreach ($aviso as $alvo => $val) {
                $alvos .= !empty($alvos) ? ", {$alvo}" : $alvo;
            }

            $aux = str_replace(
                '%BACKGROUND%',
                Seguro_Model_OrientacaoRestricaoTecnica::ORIENTACAO_RETRICAO_TECNICA_CORES[$idOrientacaoRestricaoTecnica],
                self::TEMPLATE_AVISO
            );

            $htmlAviso .= !empty($htmlAviso) 
                ? '<br>'.str_replace('%ALVOS%', $alvos, $aux)
                : str_replace('%ALVOS%', $alvos, $aux);
        }
        
        return $htmlAviso;
    }
}

?>
