<?php

class Sinistro2_Service_AvisoEncerramentoColheita
{
    /**
     * @param int $idAvisoEncerramento
     * @return string
     * @throws Exception
     */
    public function buscarMaiorDataParaDataBase(int $idAvisoEncerramento): string
    {
        $maiorData = '';
        $registros = (new Sinistro2_Model_Processos())->getDataBasePagamento(null, $idAvisoEncerramento);

        foreach ($registros as $registro) {
            $maiorData = $registro['data_aviso_encerramento'];

            if (
                !empty($registro['maior_data_arquivos_segurado'])
                && Agro_Util::contarDiasEntreDatas($maiorData, $registro['maior_data_arquivos_segurado']) > 0
            ) {
                $maiorData = $registro['maior_data_arquivos_segurado'];
            }

            if (
                !empty($registro['id_beneficiario'])
                && !empty($registro['maior_data_arquivos_beneficiario'])
                && Agro_Util::contarDiasEntreDatas($maiorData, $registro['maior_data_arquivos_beneficiario']) > 0
            ) {
                $maiorData = $registro['maior_data_arquivos_beneficiario'];
            }
        }

        return $maiorData;
    }

    /**
     * @param int $idAvisoEncerramento
     * @param string $dataBase
     * @return void
     * @throws Exception
     */
    public function salvarDataBase(int $idAvisoEncerramento, string $dataBase): void
    {
        (new Sinistro2_Model_AvisosEncerramentoDataBase())->save([
            'id_aviso_encerramento' => $idAvisoEncerramento,
            'dt_base' => !empty($dataBase) ? $dataBase : null,
        ]);
    }

    public function criaCronometroRegulacao($idProposta, $idAvisoEncerramento)
    {
        $rowProposta = (new Seguro_Model_Propostas())->getRow($idProposta);
        if (empty($rowProposta->id_proposta_mae)) {
            return;
        }

        $dtEmissao = (new Seguro_Model_PropostaStatus())->getDataApoliceEmitida($rowProposta->id_proposta_mae);
        if (empty($dtEmissao) || strtotime($dtEmissao) < strtotime(DATA_INICIO_NOVA_LEI_SEGURO)) {
            return;
        }

        $modelStatus        = new Sistema_Model_Status();
        $modelCronometro    = new Sinistro2_Model_CronometroRegulacao();
        $Util               = new Agro_Util();

        $cronometro         = $modelCronometro->fetchAll(["id_aviso_encerramento = {$idAvisoEncerramento}"])->toArray();
        
        if($cronometro[0]['id_status'] == $modelStatus->getId("SUSPENSO", 'CONTADOR_REGULACAO')){
            return false;
        }
        $dt_inicio          = $Util->proximoDiaUtil();
    
        $dadosCronometro    = array(
			'id_proposta' 	=> $idProposta,
			'id_aviso' 		=> $idAvisoEncerramento,
			'id_status'		=> $modelStatus->getId("ATIVO", 'CONTADOR_REGULACAO'),
            'dt_inicio'     => $dt_inicio->format('Y-m-d'),
            'id_cronometro' => !empty($cronometro) ? $cronometro[0]['id'] : null
		);
        $modelProcessos     = new Sinistro2_Model_Processos();
        $modelCronometro    = new Sinistro2_Model_CronometroRegulacao();
        $modelBeneficiarios = new Seguro_Model_PropostasBeneficiarios();
        $doc_segurado       = $modelProcessos->isDocumentacaoSeguradoValida($idProposta);
        $doc_beneficiarios  = $modelProcessos->isDocumentacaoBeneficiariosValida($idProposta);

        if($modelBeneficiarios->getBeneficiariosNaoBanco($idProposta)){
            if($doc_segurado && $doc_beneficiarios){
                return $modelCronometro->save($dadosCronometro);
            }else{
                return false;
            }
        }else{
            if(!$doc_segurado){
                return false;
            }
            return $modelCronometro->save($dadosCronometro);
        }
    }

    public function setStatusCronometroRegulacao($idProposta,$idCronometro)
    {
        $modelStatus = new Sistema_Model_Status();
        $modelProcessos = new Sinistro2_Model_Processos();
        $modelCronometro = new Sinistro2_Model_CronometroRegulacao();

        $doc_segurado = $modelProcessos->isDocumentacaoSeguradoValida($idProposta);
        $doc_beneficiarios = $modelProcessos->isDocumentacaoBeneficiariosValida($idProposta);
        
        if($doc_segurado && $doc_beneficiarios){
            $modelCronometro->atualizarStatus($idCronometro, $modelStatus->getId("ATIVO",'CRONOMETRO_REGULACAO'));
        }else{
            $modelCronometro->atualizarStatus($idCronometro, $modelStatus->getId("PARADO",'CRONOMETRO_REGULACAO'));
        }
        
    }

    public function criaMultiplosCronometrosRegulacaoPorProposta($idProposta)
    {
        $modelPropostas     = new Sinistro2_Model_AvisosEncerramento();
        $modelCronometro    = new Sinistro2_Model_CronometroRegulacao(); 
        $avisos = $modelPropostas->getAvisosEncerramentoByProposta($idProposta);

        if($avisos){
            foreach($avisos as $aviso){
                if(empty($modelCronometro->getCronometroByAvisoId($aviso['id']))){
                    $this->criaCronometroRegulacao($idProposta, $aviso['id']);
                }
            }
        }
        
    }
}