<?php
class Sinistro2_Service_ValidaDadosEnvio {

    const TIPO_ENVIO_LAUDO = 1;
    const TIPO_ENVIO_DOC_ACOMPANHANTE = 2;

    public function executa(int $idLaudoFinal, int $tipoEnvio): array
    {
        $modelLaudosFinais = new Sinistro2_Model_LaudosFinais();
        $dados = $modelLaudosFinais->getDadosEnvio($idLaudoFinal, $tipoEnvio);
        
        $this->validar($dados);
        $this->alterarDadosAmbienteDev($dados);

        return $dados;
    }

    private function validar(array $dados)
    {
        if (empty($dados)) {
            throw new Exception("Laudo final não encontrado.");
        }

        if (empty($dados['ds_tipo_envio'])) {
            throw new Exception("Tipo de envio não informado.");
        }

        if ($dados['ds_tipo_envio'] == 'WHATS' && empty($dados['ds_telefone_segurado'])) {
            throw new Exception("Telefone celular do segurado não informado.");
        }

        if ($dados['ds_tipo_envio'] == 'EMAIL' && empty($dados['ds_email_segurado'])) {
            throw new Exception("E-mail do segurado não informado.");
        }

        if (empty($dados['ds_email_corretor'])) {
            throw new Exception("E-mail do corretor não informado.");
        }
    }

    private function alterarDadosAmbienteDev(array &$dados)
    {
        if (APPLICATION_ENV != 'production') {
            $email = DOCUSIGN_EMAIL_TESTE;
            $sms = DOCUSIGN_SMS_TESTE;

            $dados['ds_telefone_segurado'] = $sms;
            $dados['ds_email_segurado'] = $email;
            $dados['ds_email_corretor'] = $email;
            $dados['ds_nome_proponente'] = 'Segurado';
        }
    }
}
