<?php

class Agro_ReportsSinistro extends Agro_Reports {

    private function getSinistralidadePGData(int $idSafra) {
        $this->setDb();

        return $this->getDb()->fetchAll(
            "select * from sumario.relatorio_sinistralidadepg where id_safra = {$idSafra}"
        );

    }

    private function getLaudosItensSegurados(int $itemSegurado, int $idEndosso, $idSafra) {
        return $this->getDb()->fetchAll(
            "select * from sumario.relatorio_sinistralidade_itens_segurados where nr_item_segurado = {$itemSegurado} and id_endosso = {$idEndosso} and id_safra = {$idSafra} ORDER BY id_proposta DESC, nr_item_segurado, id"
        );
    }

    /**
     * Sinistro > Relatório de Laudos Finais PG
     * Id: 1092
     * @param string $idSafra
     * @return array
     */
    public function sinistralidadepg(string $idSafra) : array
    {
        $count = 0;
        $itemSegurado = [];
        $rs = $this->getSinistralidadePGData($idSafra);
        $motivosPOIgualPE = [1, 2, 4, 5, 7, 11, 12];
        $motivosNaoSinistrado = $this->motivosNaoSinistrado();

        foreach ($rs as $row) {
            $itemSegurado[$count]['Proposta'] = $row['id_proposta'];
            $itemSegurado[$count]['Processo'] = $row['id_processo'];
            $itemSegurado[$count]['Empresa'] = $row['ds_nome_fantasia'];
            $itemSegurado[$count]['Produto'] = $row['ds_nome_produto'];
            $itemSegurado[$count]['Município'] = $row['ds_nome_municipio'];
            $itemSegurado[$count]['Nr. IBGE'] = $row['nr_ibge'];
            $itemSegurado[$count]['UF'] = $row['ds_sigla'];
            $itemSegurado[$count]['Cultura'] = $row['ds_nome_cultura'];
            $itemSegurado[$count]['Cobertura'] = $row['ds_nome_cobertura'];
            $itemSegurado[$count]['Item'] = $row['nr_item_segurado'];
            $itemSegurado[$count]['Quadra'] = $row['ds_item_segurado'];
            $itemSegurado[$count]['Variedade'] = $row['ds_nome_variedade'];
            $itemSegurado[$count]['Área'] = $row['vl_area'];
            $itemSegurado[$count]['LMGA'] = $row['vl_lmga'];
            $itemSegurado[$count]['PE'] = $row['vl_rendimento_tonelada'];
            $itemSegurado[$count]['PG'] = $row['vl_producao_garantida'];
            $itemSegurado[$count]['NC'] = $row['vl_franquia'];
            $itemSegurado[$count]['Taxa'] = $row['vl_taxa'];
            $rsLaudos = $this->getLaudosItensSegurados($row['nr_item_segurado'], $row['id_endosso'], $idSafra);

            $i = 1;
            $laudosEmBranco = [];

            if (count($rsLaudos) > 0) {
                foreach ($rsLaudos as $row2) {
                    if ($row['id_cobertura'] !== $row2['id_cobertura']) {
                        continue;
                    }

                    $motivoValidoPOIgualPE = in_array($row2['id_motivo_quadra_nao_vistoriada'], $motivosPOIgualPE);

                    $itemSegurado[$count][$i . ' % PO'] = $row2['vl_rendimento_final_lavoura'];
                    $itemSegurado[$count][$i . ' % Colhido'] = $row2['id_motivo_quadra_nao_vistoriada'] == 1
                        ? 100
                        : $row2['vl_percent_colhido'];
                    $itemSegurado[$count][$i . ' Dt. Vistoria'] = $row2['dt_vistoria'];
                    $itemSegurado[$count][$i . ' Dt. Laudo'] = $row2['dt_criacao'];
                    $itemSegurado[$count][$i . ' ID Vistoria'] = $row2['id_vistoria'];
                    $itemSegurado[$count][$i . ' % Colhido'] = $row2['vl_percent_colhido'];
                    $itemSegurado[$count][$i . ' % Podres'] = $row2['vl_graos_podres'];
                    $itemSegurado[$count][$i . ' % Brotados'] = $row2['vl_graos_brotados'];
                    $itemSegurado[$count][$i . ' % Pragas e outros'] = $row2['vl_pragas_doencas_outros'];

                    if ($motivoValidoPOIgualPE) {
                        $itemSegurado[$count][$i . ' % PO'] = $row['vl_rendimento_tonelada'];
                    }

                    if (!empty($row2['id_motivo_quadra_nao_vistoriada']) && !$motivoValidoPOIgualPE) {
                        $laudosEmBranco[] = $row2;
                        continue;
                    }

                    $itemSegurado[$count]['motivo_nao_vistoriada_' . $i] = !empty($row2['id_motivo_quadra_nao_vistoriada'])
                        ? $motivosNaoSinistrado[$row2['id_motivo_quadra_nao_vistoriada']]
                        : '';

                    $i++;
                }

                foreach ($laudosEmBranco as $laudo) {
                    $itemSegurado[$count][$i . ' % PO'] = 'null';
                    $itemSegurado[$count][$i . ' Dt. Vistoria'] = $laudo['dt_vistoria'];
                    $itemSegurado[$count][$i . ' Dt. Laudo'] = $laudo['dt_criacao'];
                    $itemSegurado[$count][$i . ' ID Vistoria'] = $laudo['id_vistoria'];
                    $itemSegurado[$count][$i . ' % Colhido'] = 'null';
                    $itemSegurado[$count][$i . ' % Podres'] = 'null';
                    $itemSegurado[$count][$i . ' % Brotados'] = 'null';
                    $itemSegurado[$count][$i . ' % Pragas e outros'] = 'null';
                    $itemSegurado[$count]['motivo_nao_vistoriada_' . $i] = '';
                    $i++;
                }
            }

            $count++;
        }

        return $itemSegurado;
    }

    private function relatorioProcessos(int $idSafra) {
        $this->setDb();

        return $this->getDb()->fetchAll(
            "select * from sumario.relatorio_processos where id_safra = {$idSafra}"
        );
    }

    private function getAvisosProcesso($id_proposta) {
        $sql = "select id,dt_sinistro from sinistro.avisos where id_status in (28,30) and id_proposta=".$id_proposta;
        return $this->getDb()->fetchAll($sql);
    }
    
    public function processos(string $idSafra) : array {

        $Rs = $this->relatorioProcessos($idSafra);

        $arr = array();
        $count = 0;
        foreach($Rs as $Row) {
            $arr[$count]['Processo']               = $Row['processo'];
            $arr[$count]['Processo Nobre'] = $Row['id_processo_seguradora'];
            $arr[$count]['Proposta']               = $Row['proposta'];
            $arr[$count]['Apólice']                = $Row['apolice'];
            $arr[$count]['ID Segurado']          = $Row['id_proponente'];
            $arr[$count]['Empresa']                = $Row['empresa'];
            $arr[$count]['Data de Abertura']          = $Row['data_abertura'];
            $arr[$count]['Produto']                = $Row['produto'];
            $arr[$count]['Status Proposta']        = $Row['status_proposta'];
            $arr[$count]['Status Processo']        = $Row['status_processo'];
            $arr[$count]['Resp. Liquidação'] = $Row['ds_nome_usuario_responsavel_liquidacao'];

            $RsAvisos = $this->getAvisosProcesso($Row['id_proposta_original']);
            $i = 1;
            foreach($RsAvisos as $row2) {
                $arr[$count][$i.'º Aviso'] = $row2['id'];
                $arr[$count][$i.'º Data'] = $row2['dt_sinistro'];
                $i++;
            }
            $count++;
        }

        return $arr;
    }

    public function relatorioSinistralidade($idSafra) {
        $this->setDb();

        return $this->getDb()->fetchAll(
            "select * 
               from sumario.relatorio_sinistralidade_processada
              where id_safra = {$idSafra}
              ORDER BY id_proposta, nr_item_segurado, dt_vistoria ASC, cobertura_principal DESC"
        );
    }

    private function getPrePosFloracao(int $id_item_segurado) {
        try{
            $sql = "select fl_floracao from regulacao.lf005_itens_segurados where id_laudo_final_item_segurado=".$id_item_segurado;
        }catch (Exception $e){
            die($e);
        }

        return $this->getDb()->fetchAll($sql);
    }

    private function getVistoriador(int $id_laudo_final_item_segurado) {
        $sql = "select u.ds_nome_usuario from sinistro.laudos_finais_itens_segurados_funcionarios lf, sistema.funcionarios f, sistema.usuarios u where f.id = lf.id_funcionario and u.id = f.id_usuario and lf.id_laudo_final_item_segurado=".$id_laudo_final_item_segurado;
        return $this->getDb()->fetchAll($sql);
    }

    private function getLaudosNaoSinistrados(int $idProcesso) {
    	return $this->getDb()->fetchAll(
            "select * from sumario.relatorio_vistorias_preliminares_nao_sinistrados where id_processo = {$idProcesso}"
        );
    }

    private function getVistoriadorLF(int $id_laudo_final) {
    	$sql = "select u.ds_nome_usuario from sinistro.laudos_finais_funcionarios lf, sistema.funcionarios f, sistema.usuarios u where f.id = lf.id_funcionario and u.id = f.id_usuario and lf.id_laudo_final=".$id_laudo_final;
    	return $this->getDb()->fetchAll($sql);
    }

    private function getAjusteReservas(int $idSafra) {
        $this->setDb();

        return $this->getDb()->fetchAll("
			select
			   seguro.id_proposta_mae(pr.id) as id_proposta_original,
			   pr.id as id_proposta_endosso,
			   pr.nr_apolice,
			   pd.ds_nome_produto,
			   co.ds_nome_cobertura,
			   co.id as id_cobertura,
			   ats.id_aviso,
			   ats.cd_identificador_seguradora as id_aviso_seguradora,
			   ats.vl_reserva,
    		   coalesce(ats.vl_indenizacao, 0) as vl_indenizacao,
    		   st.ds_chave
			from
			    sinistro.avisos_transmissao_seguradora ats,
			    sinistro.avisos av,
			    seguro.propostas pr,
			    produto.produtos pd,
			    produto.coberturas co,
    			sistema.status st,
				sistema.status st2
			where
    			pd.id_safra = {$idSafra} and
			    av.id = ats.id_aviso and
			    pr.id = av.id_proposta and
			    pd.id = pr.id_produto and
			    co.id = ats.id_cobertura and
    			st.id = av.id_status and
				st2.id = pr.id_status and
				st2.ds_chave = 'APOLICE_EMITIDA' and
				st.ds_chave in ('ACEITO','PENDENTE')
			order by
				pr.id, id_aviso_seguradora"
        );
    }

    public function sinistralidade(string $idSafra) : array
    {
        $arItemSegurado = array();
        $arCobMultirisco = [18, 29, 32];
        $coberturasReplantio = [5, 30, 31];
        $count = -1;
        $i = 1;
        $idEndosso = $nrItemSegurado = 0;

        $motivosNaoSinistrado = $this->motivosNaoSinistrado();
        $laudosNaoSinistrados = $this->laudosNaoSinistrados($idSafra);
        $rs = $this->relatorioSinistralidade($idSafra);

        foreach ($rs as $row) {
            if ($idEndosso == $row['id_endosso'] && $nrItemSegurado == $row['nr_item_segurado']) {
                $i++;
            } else {
                $count++;
                $i = 1;
            }

            $idCobertura = (int)$row['id_cobertura'];

            if (in_array($idCobertura, $arCobMultirisco)) {
                continue;
            }

            $arItemSegurado[$count]['Proposta'] = $row['id_proposta'];
            $arItemSegurado[$count]['Processo'] = $row['id_processo'];
            $arItemSegurado[$count]['Empresa'] = $row['ds_nome_fantasia'];
            $arItemSegurado[$count]['Produto'] = $row['ds_nome_produto'];
            $arItemSegurado[$count]['Município'] = $row['ds_nome_municipio'];
            $arItemSegurado[$count]['Nr. IBGE'] = $row['nr_ibge'];
            $arItemSegurado[$count]['UF'] = $row['ds_sigla'];
            $arItemSegurado[$count]['Cultura'] = $row['ds_nome_cultura'];
            $arItemSegurado[$count]['Item'] = $row['nr_item_segurado'];
            $arItemSegurado[$count]['Quadra'] = $row['ds_item_segurado'];
            $arItemSegurado[$count]['Variedade'] = $row['ds_nome_variedade'];
            $arItemSegurado[$count]['Área'] = $row['vl_area'];
            $arItemSegurado[$count]['LMGA'] = $row['vl_lmga'];

            $arItemSegurado[$count]['vl_dano_' . $i] = $row['vl_percent_perdas'] ?? '';
            $arItemSegurado[$count]['vl_dano_chocho_' . $i] = !empty($row['vl_percent_perdas_chocho'])
                ? $row['vl_percent_perdas_chocho']
                : ($row['vl_percent_perdas_chocho_nao_sinistrado'] !== null
                    ? $row['vl_percent_perdas_chocho_nao_sinistrado']
                    : '0.00');
            $arItemSegurado[$count]['vl_colhido_' . $i] = $row['vl_percent_colhido'] ?? '0.00';
            $arItemSegurado[$count]['vl_colhido_chocho_' . $i] = !empty($row['vl_percent_colhido_chocho'])
                ? $row['vl_percent_colhido_chocho']
                : ($row['vl_percent_colhido_chocho_nao_sinistrado'] !== null
                    ? $row['vl_percent_colhido_chocho_nao_sinistrado']
                    : '0.00');
            $arItemSegurado[$count]['dt_vistoria_' . $i] = $row['dt_vistoria'] ?? '';
            $arItemSegurado[$count]['dt_laudo_' . $i] = $row['dt_criacao'] ?? '';
            $arItemSegurado[$count]['fase_cultura_' . $i] = $row['fase_cultura'] ?? '';
            $arItemSegurado[$count]['ds_cobertura_' . $i] = $row['ds_nome_cobertura'] ?? '';
            $arItemSegurado[$count]['motivo_nao_vistoriada_' . $i] = !empty($row['id_motivo_quadra_nao_vistoriada'])
                ? $motivosNaoSinistrado[$row['id_motivo_quadra_nao_vistoriada']]
                : '';

            if (in_array($row['id_cobertura'], $coberturasReplantio)) {
                $arItemSegurado[$count]['vl_dano_' . $i] = round(
                    ($row['vl_ha_area_replantada'] / $row['vl_area']) * 100, 2
                );

                $arItemSegurado[$count]['vl_dano_' . $i] = "{$arItemSegurado[$count]['vl_dano_' . $i]}";
            }

            if (empty($arItemSegurado[$count]['dt_vistoria_' . $i])) {
                $laudo = array_filter($laudosNaoSinistrados, static function ($laudo) use ($row) {
                    return $laudo['id_processo'] === $row['id_processo'];
                });

                if (!empty($laudo)) {
                    $laudo = current($laudo);
                    $arItemSegurado[$count]['vl_dano_' . $i] = "0.00";
                    $arItemSegurado[$count]['vl_colhido_' . $i] = "0.00";
                    $arItemSegurado[$count]['dt_vistoria_' . $i] = $laudo['dt_vistoria'];
                    $arItemSegurado[$count]['dt_laudo_' . $i] = $laudo['dt_criacao'];
                    $arItemSegurado[$count]['ds_cobertura_' . $i] = $laudo['ds_nome_cobertura'];
                }
            }

            $idEndosso = $row['id_endosso'];
            $nrItemSegurado = $row['nr_item_segurado'];
        }

        return $arItemSegurado;
    }
    
    public function liquidacoesItem(string $idSafra) {
        $Rs = $this->relatorioLiquidacoesItem($idSafra);

        $titles = array(
            'id_processo' => 'Processo Agro',
            'id_processo_seguradora' => 'Processo Nobre',
            'id_proposta' => 'Proposta',
            'nr_apolice' => 'Apólice',
            'ds_nome_produto' => 'Produto',
            'id_proponente' => 'ID Segurado',
            'nr_item_segurado' => 'Item Segurado',
            'vl_area' => 'Área',
            'vl_lmga' => 'LMGA',
            'id_liquidacao' => 'Id Liquidação',
            'dt_liquidacao_hora' => 'Data da Liquidação',
            'vl_prejuizo' => 'Valor Prejuízo',
            'vl_indenizacao' => 'Valor Indenização',
            'vl_franquia' => 'Franquia',
            'ds_status' => 'Status',
            'dt_envio_seguradora' => 'Data de liberação para Nobre',
            'principal'=>'Principal',
            'ds_nome_cobertura'=>'Cobertura',
            'id_cobertura'=>'Id. Cobertura',
            'liquidacao_manual'=>'Manual?',
            'ds_nome_usuario_responsavel_liquidacao' => 'Resp. Liquidação'
        );

        foreach($Rs as $ch => $tupla) {
            foreach($titles as $key => $value) {
                if ($key == 'vl_indenizacao') {
                    $vlIndenizacao = round($tupla[$key],2);
                    $tupla[$value] = (string)$vlIndenizacao;
                } else {
                    $tupla[$value] = $tupla[$key];
                }
                unset($tupla[$key]);
            }
            $Rs[$ch] = $tupla;
        }

        return $Rs;
    }

    public function relatorioLiquidacoesItem(int $idSafra) {
        $this->setDb();

        return $this->getDb()->fetchAll(
            "select * from sumario.relatorio_liquidacoes_item where id_safra = {$idSafra}"
        );
    }

    /**
     * Método referente ao relatório:
     * Sinistro > Relatório de Vistoria Preliminar
     * Id: 843
     * @param string $idSafra
     * @return array
     */
    public function vistoriaspreliminares(string $idSafra) {
        $Rs = $this->relatorioVistoriasPreliminares($idSafra);

        $titles = array(
            'id_proposta' => 'Proposta',
            'id_processo' => 'Processo',
            'ds_nome_fantasia' => 'Empresa',
            'ds_nome_produto' => 'Produto',
            'ds_nome_municipio' => 'Município',
            'nr_ibge' => 'Nr. IBGE',
            'ds_sigla' => 'UF',
            'ds_nome_cultura' => 'Cultura',
            'nr_item_segurado' => 'Item',
            'ds_item_segurado' => 'Quadra',
            'ds_nome_variedade' => 'Variedade',
            'vl_area' => 'Área',
            'vl_lmga' => 'LMGA',
        );

        for ($contador = 1; $contador <= 8; $contador++) {
            $titles["vl_dano_{$contador}"] = "{$contador} % PO";
            $titles["dt_laudo_{$contador}"] = "{$contador} Dt. Laudo";
        	$titles["ds_nome_cobertura_{$contador}"] = "{$contador} Cobertura";
            $titles["id_vistoria_{$contador}"] = "{$contador} ID Vistoria";
            $titles["ds_nome_estadio_fenologico_{$contador}"] = "{$contador} Estadio Fenológico";
            $titles["tamanho_planta_{$contador}"] = "{$contador} Tamanho Planta";
            $titles["eventos_{$contador}"] = "{$contador} Eventos";
        }

        $count = 0;
        $arItemSegurado = array();
        foreach($Rs as $Row) {
            $arItemSegurado[$count]['id_proposta']        = $Row['id_proposta'];
            $arItemSegurado[$count]['id_processo']        = $Row['id_processo'];
            $arItemSegurado[$count]['ds_nome_fantasia']   = $Row['ds_nome_fantasia'];
            $arItemSegurado[$count]['ds_nome_produto']    = $Row['ds_nome_produto'];
            $arItemSegurado[$count]['ds_nome_municipio']  = $Row['ds_nome_municipio'];
            $arItemSegurado[$count]['nr_ibge']            = $Row['nr_ibge'];
            $arItemSegurado[$count]['ds_sigla']           = $Row['ds_sigla'];
            $arItemSegurado[$count]['ds_nome_cultura']    = $Row['ds_nome_cultura'];
            $arItemSegurado[$count]['nr_item_segurado']   = $Row['nr_item_segurado'];
            $arItemSegurado[$count]['ds_item_segurado']   = $Row['ds_item_segurado'];
            $arItemSegurado[$count]['ds_nome_variedade']  = $Row['ds_nome_variedade'];
            $arItemSegurado[$count]['vl_area']            = $Row['vl_area'];
            $arItemSegurado[$count]['vl_lmga']            = $Row['vl_lmga'];

            $RsLaudos = $this->getLaudosPreliminaresItensSegurados($Row['id_item_segurado'], $Row['id_safra']);
            $i = 1;
            $intensidadeDefault = '-';
            $statusLaudoPreliminarCancelado = [206, 208];
            $coberturasReplantio = [5, 31, 36, 30];

            if (count($RsLaudos) > 0) {
                foreach ($RsLaudos as $Row2) {
                    $flagZerarIntensidadeParaReplantio = false;

                    if (!$Row2['fl_dt_evento_em_cobertura'] || $Row2['fl_evento_nao_constatado']) {
                        $intensidadeDefault = '0';
                        $flagZerarIntensidadeParaReplantio = true;
                    }

                    $intensidadeDefault = !in_array($Row2['id_status'], $statusLaudoPreliminarCancelado)
                        ? $intensidadeDefault
                        : '-';

                    if (in_array($Row2['id_cobertura'], $coberturasReplantio) && $flagZerarIntensidadeParaReplantio) {
                        $Row2['intensidade'] = '0';
                    } else {
                        $Row2['intensidade'] =  in_array($Row2['id_cobertura'], $coberturasReplantio)
                            ? 2
                            : $Row2['intensidade'];
                    }

                    $arItemSegurado[$count]['vl_dano_' . $i] = $Row2['intensidade']
                        ? "{$Row2['intensidade']}"
                        : $intensidadeDefault;
                    $arItemSegurado[$count]['dt_laudo_' . $i] = $Row2['dt_criacao'];
                    $arItemSegurado[$count]['ds_nome_cobertura_' . $i] = $Row2['ds_nome_cobertura'];
                    $arItemSegurado[$count]['id_vistoria_' . $i] = $Row2['id_vistoria'];
                    $arItemSegurado[$count]['ds_nome_estadio_fenologico_' . $i] = $Row2['ds_nome_estadio_fenologico'];
                    $arItemSegurado[$count]['tamanho_planta_' . $i] = $Row2['tamanho_planta'];
                    $arItemSegurado[$count]['eventos_' . $i] = $Row2['eventos'];
                    $i++;
                }
            } else {
                $RsLaudos = $this->getLaudosPreliminaresNaoSinistrado($Row['id_processo']);
                $i = 1;

                foreach ($RsLaudos as $Row2) {
                    $flagZerarIntensidadeParaReplantio = false;

                    if (!$Row2['fl_dt_evento_em_cobertura'] || $Row2['fl_evento_nao_constatado']) {
                        $intensidadeDefault = '0';
                        $flagZerarIntensidadeParaReplantio = true;
                    }

                    $intensidadeDefault = !in_array($Row2['id_status'], $statusLaudoPreliminarCancelado)
                        ? $intensidadeDefault
                        : '-';

                    if (in_array($Row2['id_cobertura'], $coberturasReplantio) && $flagZerarIntensidadeParaReplantio) {
                        $arItemSegurado[$count]['vl_dano_' . $i] = '0';
                    } else {
                        $arItemSegurado[$count]['vl_dano_' . $i] = in_array($Row2['id_cobertura'], $coberturasReplantio)
                            ? 2
                            : $intensidadeDefault;
                    }

                    $arItemSegurado[$count]['vl_dano_' . $i] = '-';
                    $arItemSegurado[$count]['dt_laudo_' . $i] = "-";
                    $arItemSegurado[$count]['ds_nome_cobertura_' . $i] = '';
                    $arItemSegurado[$count]['id_vistoria_' . $i] = '';
                    $arItemSegurado[$count]['ds_nome_estadio_fenologico_' . $i] = '';
                    $arItemSegurado[$count]['tamanho_planta_' . $i] = '';
                    $arItemSegurado[$count]['eventos_' . $i] = '';

                    if (!empty($Row2['id_item_segurado'])) {
                        $arItemSegurado[$count]['vl_dano_' . $i] = '0.00';
                        $arItemSegurado[$count]['dt_laudo_' . $i] = $Row2['dt_criacao'];
                        $arItemSegurado[$count]['ds_nome_cobertura_' . $i] = $Row2['ds_nome_cobertura'];
                        $arItemSegurado[$count]['id_vistoria_' . $i] = $Row2['id_vistoria'];
                        $arItemSegurado[$count]['ds_nome_estadio_fenologico_' . $i] = $Row2['ds_nome_estadio_fenologico'];
                        $arItemSegurado[$count]['tamanho_planta_' . $i] = $Row2['tamanho_planta'];
                    }

                    $i++;
                }
            }

            $count++;
        }

        foreach($arItemSegurado as $ch => $tupla) {
            foreach($titles as $key => $value) {
                if (array_key_exists($key, $tupla)) {
                    $tupla[$value] = $tupla[$key];
                    unset($tupla[$key]);
                }
            }
            $arItemSegurado[$ch] = $tupla;
        }

        return $arItemSegurado;
    }

    public function relatorioVistoriasPreliminares(int $idSafra) {
        $this->setDb();

        return $this->getDb()->fetchAll(
            "select * from sumario.relatorio_vistorias_preliminares where id_safra = {$idSafra}"
        );
    }
 
    public function getLaudosPreliminaresItensSegurados(int $idItemSegurado) {
        return $this->getDb()->fetchAll(
            "select * from sumario.relatorio_vistorias_preliminares_itens_segurados where id_item_segurado = {$idItemSegurado}"
        );
    }

    public function getLaudosPreliminaresNaoSinistrado(int $idProcesso) {
        return $this->getDb()->fetchAll(
            "select * from sumario.relatorio_vistorias_preliminares_nao_sinistrados where id_processo = {$idProcesso}"
        );
    }
    
    public function ajusteReservas(string $safra){
        $i = 0;
        $Rs = $this->getAjusteReservas(intval($safra));

        $titles = array(
            'id_proposta_original' 		  => 'Proposta',
            'id_proposta_endosso' 		  => 'Proposta Endosso',
            'nr_apolice' 		          => 'Apólice',
            'ds_nome_produto'             => 'Produto',
            'id_cobertura'    	          => 'Id Cobertura',
            'ds_nome_cobertura'    	      => 'Cobertura',
            'id_aviso'                    => 'Aviso',
            'id_aviso_seguradora'         => 'Aviso Seguradora',
            'vl_reserva'                  => 'Reserva Atual',
            'vl_indenizacao'              => 'Indenização Paga',
            'ds_chave'                    => 'Status'
        );

        foreach($Rs as $row) {
            $Rs[$i] = array_combine($titles, $row);
            $i++;
        }

        return $Rs;
    }

    public function getAvisoReserva(int $idAviso, int $idCobertura) {
        $this->setDb();
        
        return $this->getDb()->fetchAll("
            select ats.*, sa.id_proposta, pc.*
              from sinistro.avisos_transmissao_seguradora ats
              join sinistro.avisos sa
                on sa.id = ats.id_aviso
              join produto.coberturas pc
                on ats.id_cobertura = pc.id
             where ats.id_aviso = {$idAviso}
               and ats.id_cobertura = {$idCobertura}
        ");
    }

    public function getProposta(int $idProposta) {
        $this->setDb();
        
        return $this->getDb()->fetchAll("
            select pr.*, pp.*
              from seguro.propostas pr
              join seguro.propostas_proponentes pp
                on pr.id = pp.id_proposta
             where pr.id = {$idProposta}
        ");
    }
    /**
     * @todo adicionar o id_usuario_alteracao~
     * @param array $data
     * @return boolean
     */
    public function updateAvisoTransmissaoSeguradora(array $data) : bool {
        $this->setDb();
    
        $this->getDb()->beginTransaction();
        try {
            foreach ($data as $reg) {
                $this->getDb()->query("
                    update sinistro.avisos_transmissao_seguradora set
                        vl_indenizacao = {$reg['[SumVALOR_PAGO]']},
                        dt_alteracao = 'now()'
                    where cd_identificador_seguradora = '{$reg['Pagos[SINISTRO_I4PRO]']}' 
                ");
            }

            $this->getDb()->commit();
            return true;
        } catch (Exception $e) {
            $this->getDb()->rollback();
            return false;
        }
    }

    public function updateValorReserva(array $data) : bool
    {
        $this->setDb();

        $this->getDb()->beginTransaction();
        try {
            foreach ($data as $reg) {
                $this->getDb()->query("
                    update sinistro.avisos_transmissao_seguradora set
                        vl_reserva = {$reg['Reserva[RESERVA_REGISTRO_OFICIAL]']},
                        dt_alteracao = 'now()'
                    where cd_identificador_seguradora = '{$reg['Reserva[Sinistro]']}' 
                ");
            }

            $this->getDb()->commit();
            return true;
        } catch (Exception $e) {
            $this->getDb()->rollback();
            return false;
        }
    }

    private function motivosNaoSinistrado() : array
    {
        return [
            '1' => 'Área Colhida',
            '2' => 'Segurado dispensa vistoria',
            '3' => 'Área Erradicada',
            '4' => 'Não Semeadura/poda do Talhão',
            '5' => 'Não Emergência das Plantas',
            '6' => 'Condições Climáticas Desfavoráveis',
            '7' => 'Área não atingida / Não sinistrada',
            '8' => 'Cultura não está madura',
            '9' => 'Item já consta em vistoria com data anterior',
            '10' => 'Não Realizada nesta Vistoria',
            '11' => 'As coordenadas não coincidem com as coordenadas da proposta',
            '12' => 'A data de ocorrência do evento está fora do período de cobertura',
        ];
    }

    private function laudosNaoSinistrados($idSafra)
    {
        $this->setDb();
        return $this->getDb()->fetchAll("SELECT * FROM sumario.laudos_nao_sinistrados WHERE id_safra = {$idSafra}");
    }
}
