<?php 

class Regulacao_Model_Lf037ItensSeguradosAmostras extends Regulacao_Model_LaudosFinaisItensSeguradosAmostras {
	protected $_rowClass = 'Regulacao_Model_Row_Lf037ItemSeguradoAmostras';
	protected $_schema 	= 'regulacao';
	protected $_name 	= 'lf037_itens_segurados_amostras';
	protected $_primary = 'id';
	public 	  $_order 	= 'nr_amostra';

    public function save(array $dados) {
        $Lf037ItensSegurados = new Regulacao_Model_Lf037ItensSegurados();
        $dados = $this->prepararDados($dados);

        if ($this->validar($dados)) {
            $dados = $this->calcular($dados);

            if (!is_array($dados["id_item_segurado_replicar"])) {
                $dados["id_item_segurado_replicar"] = array();
            }

            array_unshift($dados["id_item_segurado_replicar"], $dados["id_item_segurado"]);
            $dados["id_item_segurado_replicar_arquivo"] = $dados["id_item_segurado"];
            
            $this->limparDadosReplicados($dados["id_laudo_final"], $dados["id_item_segurado"], $dados["id_item_segurado_replicar"]);
            
            $count = 1;
            foreach ($dados["id_item_segurado_replicar"] as $id_item_segurado) {
                $dados["id_item_segurado"] = $id_item_segurado;
                $dados['id_laudo_final_item_segurado'] = $Lf037ItensSegurados->save($dados);

                if ($dados['id_laudo_final_item_segurado']) {
                    try{
                        $this->delete($dados['id_laudo_final_item_segurado'], 'id_laudo_final_item_segurado');

                        foreach ($dados['amostras'] as $key => $amostra) {
                            $amostra['nr_amostra'] = $key;
                            $amostra['id_laudo_final_item_segurado'] = $dados['id_laudo_final_item_segurado'];
                            $this->insert($amostra);
                        }

                        if ($count == 1) {
                            $this->setMessage("Laudo salvo com sucesso.");
                            $return = $dados["id_laudo_final_item_segurado"];
                        }

                        $count++;
                    } catch (Exception $e) {
                        $this->setMessage($e->getMessage());
                        return false;
                    }
                } else {
                    $this->setMessage($Lf037ItensSegurados->getMessages());
                    return false;
                }
            }

            return $return;
        }
    }

    public function validar(array $dados) {
        $messages = array();

        if (count($dados['amostras']) < 1) {
            $messages[] = 'Preencha ao menos uma amostra';
        }

        foreach ($dados['amostras'] as $key => $val) {
            if ($val['nr_graos_estereis'] > $val['nr_potencial_graos']) {
                $messages[] = 'O número de Potencial Produção Grão não pode ser inferior aos Grãos Não Fecundados';
            }

            if ($val['nr_potencial_graos'] < 10) {
                $messages[] = 'O número de Potencial Produção Grãos não pode ser inferior a 10';
            }
        }

        if (count($messages)) {
            $this->setMessage('Os itens citados abaixo são de preenchimento obrigatório:<ul><li>'.implode('</li><li>',$messages).'</li></ul>');
            return false;
        } else {
            return true;
        }
    }

    public function calcular(array $dados) { 
        for ($i=1; $i <= 10; $i++) {
            if (($dados['amostras'][$i]['nr_potencial_graos'] != '') && ($dados['amostras'][$i]['nr_graos_estereis'])) {
                $percentual = round(($dados['amostras'][$i]['nr_graos_estereis']/$dados['amostras'][$i]['nr_potencial_graos'])*100,4);

                if ($percentual < 15.01) {
                    $dados['amostras'][$i]['vl_percent_dano'] = 0;
                } else {
                    $dados['amostras'][$i]['vl_percent_dano'] = $percentual - 15;
                }
                
                $sumDanoAmostra += $dados['amostras'][$i]['vl_percent_dano'];
                $dados['vl_percent_total_dano'] = $dados['vl_percent_perdas'] = $sumDanoAmostra/$i;
            }
        }

        return $dados;
    }

    public function prepararDados(array $dados) {
        $dados['amostras'] = array();

        for ($i = 1; $i <= 10; $i++) { 
            if (($dados["nr_potencial_graos-$i"] != null) && ($dados["nr_graos_estereis-$i"] != null)) {
                $amostra = array(
                    'nr_potencial_graos' => $dados['nr_potencial_graos-'.$i],
                    'nr_graos_estereis'  => $dados['nr_graos_estereis-'.$i]
                ); 
                $dados['amostras'][$i] = $amostra;
            }
        }
        
        $dados['dt_vistoria'] = Agro_Util::joinDtVistoria($dados['dt_vistoria_data'], $dados['dt_vistoria_hora'], $dados['dt_vistoria_minutos']);
        $dados['qtd_amostras'] = count($dados['amostras']);
      
        return $dados;
    }

    public function get(int $idLaudoFinalItemSegurado) {
        $LaudoFinalItemSegurado = new Sinistro2_Model_LaudosFinaisItensSegurados();

        $dados = $LaudoFinalItemSegurado->getDataLaudoFinalItemSegurado($idLaudoFinalItemSegurado);
        $itens = [];

        if (!$dados['fl_nao_vistoriada']) {
            $select = $this->select()->setIntegrityCheck(false)
                ->from(array('lf037is' => 'regulacao.lf037_itens_segurados'), array(
                    'id_estadio_fenologico', 
                    'vl_percent_colhido', 
                    'vl_percent_total_dano', 
                    'vl_percent_total_red_produtividade')
                    )
                ->where('id_laudo_final_item_segurado = ?', $idLaudoFinalItemSegurado);
            
            $itens = $this->fetchRow($select)->toArray();
        }

        $dados['amostras'] = array();

        if (!$dados['fl_nao_vistoriada']) {
            $i=1;
            $amostras = $this->fetchAll('id_laudo_final_item_segurado = ' . $idLaudoFinalItemSegurado)->toArray();
            foreach ($amostras as $amostra) {
                $dados['amostras'][$i] = $amostra;
                $i++;
            }
        }

        return array_merge($dados,$itens);
    }
}