<?php

class Produto_CulturaVariedadeController extends Agro_Controller_Action {
	
	public function indexAction() {
		$session = new Zend_Session_Namespace('cultura');
		
		if ($this->getRequest()->isPost()) {
			$this->save($this->getRequest()->getPost());
		}
		
		$Cultura = $this->getModel();
		$id = $this->getRequest()->getParam('id');
		$this->view->cultura = $Cultura->find($id)->current();
		
		
		$this->view->relacionadas = $Cultura->getVariedades($id);
		$this->view->id = $id;
		$this->view->title = "Produto » Cadastro » Culturas » Variedades";
		$this->view->back = '/produto/cultura';
	}
	
	public function getModel() {
		return new Produto_Model_Culturas();
	}
	
	public function save(array $post) {
		$session = new Zend_Session_Namespace('cultura');
		$Cultura = $this->getModel();
		
		try {
			$acaoLimpar = $this->getRequest()->getParam('limpar');
			if (isset($acaoLimpar)) {
				$Cultura->removeVariedades($this->getRequest()->getParam('id'));
			} else {
				$Cultura->setVariedades($post['variedades'], $this->getRequest()->getParam('id'));
			}
			
			$this->view->showMessage(MSG_SUCCESS, 'success');
		} catch (Exception $e) {
			$this->view->showMessage(MSG_ERROR, 'error');
		}
		
	}
	
	public function setculturaAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		
		$cultura = new Zend_Session_Namespace('cultura');
		$cultura->id = $this->getRequest()->getParam('id');
		
		$this->_redirect('/produto/culturavariedade');
	}

	public function importarAction()
	{
        $this->isAjax();

        $retorno = ['erro' => false, 'mensagem' => 'Importação realizada com sucesso.'];
        $registros = [];

		try {
			Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

			if (empty($this->getRequest()->getParam('id'))) {
				throw new Exception("ID da cultura não informado.");
			}

	        $Adapter = new Zend_File_Transfer_Adapter_Http();
	        $Adapter->setDestination(APPLICATION_PATH . '/upload_files/temp/');
	        $Adapter->addValidator('Extension', false, ['csv']);

	        $file = $Adapter->getFileInfo();
	        $nomeArquivo = $file['variedades']['name'];

	        if (!$Adapter->isValid()) {
	        	throw new Exception("Formato de arquivo deve ser CSV (Separador por vírgula).");
	        }

	        if (!$Adapter->receive($nomeArquivo)) {
	        	throw new Exception("Erro ao receber o arquivo de importação as variedades.");
	        	
	        }
            
			$Cultura = $this->getModel();
			$id = $this->getRequest()->getParam('id');
			$variedades = $Cultura->getVariedades($id);
	        $linhaCabecalho = true;
            $arquivo = fopen(APPLICATION_PATH . '/upload_files/temp/' . $nomeArquivo, 'r');

	        while (($dados = fgetcsv($arquivo, 0, ';')) != false) {
	        
	        	if ($linhaCabecalho) {

	        		if (strtolower($dados[0]) != 'id_variedade') {
	        			throw new Exception("Importação inválida. O arquivo deve conter a coluna ID_Variedade.");
	        		}

	        		$linhaCabecalho = false;
	        		continue;
	        	}

	        	if (!is_numeric($dados[0])) {
	        		continue;
	        	}

	        	if (in_array($dados[0], $variedades)) {
	        		continue;
	        	}

	        	$variedades[] = $dados[0];

	        }

	        $Cultura->setVariedades($variedades, $id);
	        Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
		} catch (Exception $e) {

			$retorno['erro'] = true;
			$retorno['mensagem'] = $e->getMessage();
			Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
			$this->getResponse()->setBody(Zend_Json::encode($retorno));
			return false;
		}

		$this->getResponse()->setBody(Zend_Json::encode($retorno));
		return true;
	}
}
