<?php

class Produto_Model_VariedadesCiclos extends Agro_Db_Table_Abstract {
	protected $_schema = 'produto';
	protected $_name = 'variedades_ciclos_estados';
	protected $_primary = 'id';
	public $_order = array('id_produto', 'ds_nome_variedade', 'id_estado', 'ds_nome_ciclo');
	public $_columnExcel = array(
		'id' => 'Cód',
		'ds_nome_safra' => 'Safra',
		'ds_nome_produto' => 'Produto',
		'ds_nome_variedade' => 'Variedade',
		'ds_nome_ciclo' => 'Ciclo',
		'ds_nome_estado' => 'Estado'
	);
	
	public function save($values) {
		if(!$values['id_produto']) {
			$this->setMessage("Nenhum produto foi selecionado!");
			return false;
		}
		try {
			if ($this->verificaChave($values)) {
				$this->setMessage('Esta combinação de Produto/Estado/Variedade/Ciclo já está cadastrada!');
				return false;
			} else {
				$Row = $this->getRow($values['id']);
				
				if (!$values['id_estado']) {
					$this->setMessage('Informe um estado para poder realizar este processo!');
					return false;
				}
				
				$Row->id_produto   = $values['id_produto'];
				$Row->id_ciclo     = $values['id_ciclo'];
				$Row->id_variedade = $values['id_variedade'];
				$Row->id_estado    = $values['id_estado'];
				$Row->id_regiao    = ($values['id_regiao'] ? $values['id_regiao'] : null);
				try {
				    $Row->save();
				} catch (Exception $e) {
				    die($e);
				}
				return true;
			}
		} catch (Exception $e) {
			$this->setMessage($e->getMessage());
		}
		
		return false;
	}
	
	public function deleteCultivar($id_estado, $id_variedade, $id_ciclo, $id_produto, $id_regiao=null) {

		try{
			if($id_regiao){
		        $sql_regiao = " and id_regiao = ".$id_regiao;
		    }
			
		    $this->_db->query("delete from produto.variedades_ciclos_estados where
				    		id_produto   = $id_produto and
				    		id_ciclo     = $id_ciclo and
				    		id_variedade = $id_variedade and
				    		id_estado    = $id_estado
				    		$sql_regiao
	    	");

	    	return true;

		}catch (Exception $e){
			return false;
		}
	}
	
	public function delete($id_produto) {
	    try{
            $this->_db->query("DELETE FROM produto.variedades_ciclos_estados WHERE id_produto = $id_produto");
    		return true; 		
	    }catch (Exception $e){
	        return false;
	    }
	}
	
	public function verificaChave($dados) {
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('p' => 'produto.variedades_ciclos_estados'));
		$select->where('p.id_variedade = ?', $dados['id_variedade']);
		$select->where('p.id_produto = ?', $dados['id_produto']);
		$select->where('p.id_estado = ?', $dados['id_estado']);
		$select->where('p.id_ciclo = ?', $dados['id_ciclo']);
		if($dados['id_regiao']){
		    $select->where('p.id_regiao = ?', $dados['id_regiao']);
		}
		if($dados['id']){
		    $select->where('p.id <> ?', $dados['id']);
		}
		
		return $this->fetchAll($select)->count();
	}
	
	public function getData($where=false) {
		$teste = $this->_db->getProfiler();
		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('vce' => 'produto.variedades_ciclos_estados'));
		$select->join(array('p' => 'produto.produtos'), ' vce.id_produto = p.id', 'ds_nome_produto');
		$select->join(array('s' => 'produto.safras'), ' p.id_safra = s.id', 'ds_nome_safra');
		$select->join(array('c' => 'produto.ciclos'), ' vce.id_ciclo = c.id', 'ds_nome_ciclo');
		$select->join(array('e' => 'sistema.estados'), ' vce.id_estado = e.id', 'ds_nome_estado');
		$select->joinLeft(array('r' => 'sistema.regioes'), ' vce.id_regiao = r.id', 'ds_nome_regiao');
		$select->join(array('v' => 'produto.variedades'), ' vce.id_variedade = v.id', 'ds_nome_variedade');
		
		if ($this->_view) {
			$select->setIntegrityCheck(false);
			$select->from("{$this->_schema}.{$this->_view}");
		}

		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 getVariedadeCicloProdutoEstado(
      int $idProduto,
      int $idVariedade,
      int $idCiclo,
      int $idEstado,
      int $idRegiao = null
    ): array {
        if (empty($idProduto) || empty($idVariedade) || empty($idCiclo) || empty($idEstado)) {
            return [];
        }

        $select = $this->select()->setIntegrityCheck(false);
        $select->from(['vce' => 'produto.variedades_ciclos_estados'], ['var.id']);
        $select->join(['var' => 'produto.variedades'], 'var.id = vce.id_variedade', 'ds_nome_variedade');
        $select->where('vce.id_produto = ?', $idProduto);
        $select->where('vce.id_variedade = ?', $idVariedade);
        $select->where('vce.id_ciclo = ?', $idCiclo);
        $select->where('vce.id_estado = ?', $idEstado);

        if (!empty($idRegiao)) {
            $select->where('vce.id_regiao = ?', $idRegiao);
        }

        return $this->fetchAll($select)->toArray();
    }
}