<?php

class Produto_Model_ValidacoesValores extends Agro_Db_Table_Abstract {
	protected $_schema = 'produto';
	protected $_name = 'validacoes_is_valores';
	protected $_primary = 'id';
	public $_paginator = false;
	public $_order = array('id_grupo_variedade', 'id_grupo_portaenxerto', 'id_grupo_densidade', 'nu_idade');

	public function getData($where=false) {
		$Select = $this->select();
		$Select->setIntegrityCheck(false);

		$Select->from(array('v'=>'produto.validacoes_is_valores'));
		$Select->joinLeft(array('pe' => 'produto.validacoes_grupo_portaenxerto'), 'v.id_grupo_portaenxerto = pe.id', array('ds_nome_grupo_portaenxerto'));
		$Select->joinLeft(array('d' => 'produto.validacoes_grupo_densidade'), 'v.id_grupo_densidade = d.id', 'ds_nome_grupo_densidade');
		$Select->joinLeft(array('gv' => 'produto.validacoes_grupo_variedade'), 'v.id_grupo_variedade = gv.id', 'ds_nome_grupo_variedade');

		if ($this->_order) {
			$Select->order($this->_order);
		}

		if (is_array($where)) {
			foreach ($where as $clause) {
				if (is_array($clause)) {
					$field = $clause['field'];
					$operator = $clause['operator'];
					$value = $clause['value'];

					$Select->where("$field $operator ?", $value);
				} else {
					$Select->where($clause, '');
				}
			}
		} elseif ($where != '') {
			$Select->where($where);
		}

		return $Select;
	}

	public function existeValidacao($params) {
		$Select = $this->select();
		$Select->where('id_validacao = ?', $params['id_validacao']);
		$Select->where('id_grupo_variedade = ?', $params['id_grupo_variedade']);
		$Select->where('vl_minimo = ?', $params['vl_minimo']);
		$Select->where('vl_maximo = ?', $params['vl_maximo']);
		$Select->where('nu_idade = ?', $params['nu_idade']);
		if($params['id']){
			$Select->where('id != ?', $params['id']);
		}

		return $this->fetchAll($Select)->count();
	}

	public function save($values) {
		$Row = $this->getRow($values['id']);
		$Row['id_grupo_portaenxerto'] = $values['id_grupo_portaenxerto'] ? $values['id_grupo_portaenxerto'] : null;
		$Row['id_grupo_variedade'] = $values['id_grupo_variedade'];
		$Row['id_grupo_densidade'] = $values['id_grupo_densidade'] ? $values['id_grupo_densidade'] : null;
		$Row['vl_minimo'] = $values['vl_minimo'];
		$Row['vl_maximo'] = $values['vl_maximo'];
		$Row['nu_idade'] = $values['nu_idade'];
		$Row['id_validacao'] = $values['id_validacao'];
		return $Row->save();
	}

	public function setAtivo($id) {
		$Rs = $this->find($id)->current();

		if ($Rs->fl_ativo == 0) {
			$Rs->fl_ativo = 1;
		} else {
			$Rs->fl_ativo = 0;
		}

		return $Rs->save();
	}

	public function getValores($variedade, $portaenxerto="", $densidade="", $idade, $validacao) {
		$Select = $this->select()->distinct(true);
		if($portaenxerto){
		    $Select->where('id_grupo_portaenxerto = ?', $portaenxerto);
		}
		if($densidade){
		    $Select->where('id_grupo_densidade = ?', $densidade);
		}
		$Select->where('id_grupo_variedade = ?', $variedade);
		$Select->where('id_validacao = ?', $validacao);
		$Select->order('nu_idade');

		$item = false;
		$Rs = $this->fetchAll($Select);

		if ($this->_existeIdadeNoArray($idade, $Rs->toArray())) {
			if ($Rs->count()) {
				foreach ($Rs as $Row) {
					$item = array(
						'vl_minimo' => $Row->vl_minimo,
						'vl_maximo' => $Row->vl_maximo,
						'nr_plantas' => $Row->nr_plantas,
						'nr_plantas_regiao' => $Row->nr_plantas_regiao
					);

					if ($idade == $Row->nu_idade) {
						break;
					}
				}
			}
		} else {
			$Rs = $Rs->toArray();
			$primeiro = $Rs[0]['nu_idade'];
			$ultimo = $Rs[(count($Rs)-1)]['nu_idade'];

			$difPrimeiro = abs($idade - $primeiro);
			$difUltimo = abs($idade - $ultimo);

			if ($difPrimeiro < $difUltimo) {
				$item = array(
					'vl_minimo' => $Rs[0]['vl_minimo'],
					'vl_maximo' => $Rs[0]['vl_maximo'],
					'nr_plantas' => $Rs[0]['nr_plantas'],
					'nr_plantas_regiao' => $Rs[0]['nr_plantas_regiao']
				);
			} elseif ($difPrimeiro > $difUltimo) {
				$item = array(
					'vl_minimo' => $Rs[(count($Rs)-1)]['vl_minimo'],
					'vl_maximo' => $Rs[(count($Rs)-1)]['vl_maximo'],
				    'nr_plantas' => $Rs[(count($Rs)-1)]['nr_plantas'],
				    'nr_plantas_regiao' => $Rs[(count($Rs)-1)]['nr_plantas_regiao']
				);
			}
		}

		return $item;
	}

	private function _existeIdadeNoArray($idade, $array) {
		foreach ($array as $row) {
			if ($row['nu_idade'] == $idade) {
				return true;
			}
		}

		return false;
	}
}
