<?php

use Dompdf\Exception;

class Produto_PropriedadeController extends Agro_Controller_Action {
	public function init() {
		$this->view->title = 'Produto » Configurações » Preencher Propriedades em Lote';
	}
	
	public function getForm() {
		return new Produto_Form_Propriedade();
    }

    public function preencheremloteAction() {
		$this->view->form = $this->getForm();

		if ($this->getRequest()->isPost()) {
			$params = $this->getRequest()->getParams();

			if ($this->isValidValues($params)) {
				$produtoAtributosModel = new Produto_Model_ProdutosAtributos();
				$atributosGrupoModel = new Produto_Model_Atributogrupos();
				if (!empty($params['id_produto'])) {
					$grupos = $atributosGrupoModel->fetchAll("id_produto in (".implode(',', $params['id_produto']).") and ds_tipo = 'p'");// ds_tipo = 'p', pegar somente as propriedades
				} else {
					$produtoModel = new Produto_Model_Produtos;
					$produtos = $produtoModel->getProdutosByCultura($params['id_cultura']);
					$ids = array_map(function($element) {
						return $element['id'];
					}, $produtos);

					$grupos = array();
					if (!empty($ids)) {
						$grupos = $atributosGrupoModel->fetchAll("id_produto in (".implode(',', $ids).") and ds_tipo = 'p'");// ds_tipo = 'p', pegar somente as propriedades
					}
				}

				try {
					$produtoAtributosModel->getAdapter()->beginTransaction();

					foreach ($grupos as $grupo) {
						$produtoAtributosModel->deleteProdutoAtributo($grupo['id'], $params['id_atributo']);

						if (!$params['limpar_dados']) {
						    $valueAtributo = $params['value_atributo'];

						    $rowAtributo = (new Produto_Model_Atributos())->find($params['id_atributo'])->current();

						    if ($rowAtributo['ds_chave_rn'] === Produto_Model_Atributos::DS_CHAVE_PROD_SUBVENCAO_FEDERAL_VALOR_MAX_GRUPO) {
						        if (!isset($valueAtributo[$params['id_atributo'].'_complemento'])) {
						            throw new \Exception('Valor e/ou grupo não informado.', Produto_Model_Atributos::EXCEPTION_PROD_SUBVENCAO_FEDERAL_VALOR_MAX_GRUPO_NAO_INFORMADO);
                                }
                            }

							$produtoAtributosModel->save(array(
								'id_grupo_atributo_rn' => $grupo['id'],
								'id_atributo_rn' => $params['id_atributo'],
                                'ds_valor' => !isset($valueAtributo[$params['id_atributo'].'_complemento']) ? $valueAtributo :
                                  $valueAtributo[$params['id_atributo']].','.implode(',',$valueAtributo[$params['id_atributo'].'_complemento']),
								'fl_del' => 'f'
							));
						}
					}

					$produtoAtributosModel->getAdapter()->commit();
					$this->view->showMessage('Atributo atualizado corretamente!', 'success');
				} catch (\Exception $e) {
					$produtoAtributosModel->getAdapter()->rollBack();

					$mensagem = 'Ocorreu um erro ao salvar os atributos!';

					if ($e->getCode() === Produto_Model_Atributos::EXCEPTION_PROD_SUBVENCAO_FEDERAL_VALOR_MAX_GRUPO_NAO_INFORMADO) {
                        $mensagem = $e->getMessage();
                    }

					$this->view->showMessage($mensagem, 'error');
				}
			} else {
				$this->view->showMessage('Informe os valores corretamente!', 'error');
			}
		}
	}
	
	public function montaatributoAction() {
		$this->isAjax();
		$params = $this->getRequest()->getParams();

		if (!isset($params['id_atributo']) || empty($params['id_atributo'])) {
			$this->getResponse()->setBody('<script>alert(\'Atributo inválido!\');</script>');
		} else {
			$atributoModel = new Produto_Model_Atributos();
			$this->view->row = $atributoModel->buscaPorId($params['id_atributo']);

			$this->getResponse()->setBody($this->view->render('propriedade/montaatributo.phtml'));
		}
	}

	/**
	 * Valida as informações necessárias para alterar valores dos atributos
	 * 
	 * @return boolean
	 */
	private function isValidValues($params){
		if (!isset($params['id_atributo']) || empty($params['id_atributo'])) {
			return false;
		}

		if (!isset($params['id_safra']) || empty($params['id_safra'])) {
			return false;
		}

		if (!isset($params['id_cultura']) || empty($params['id_cultura'])) {
			return false;
		}

		return true;
	}
}