<?php
class ControllerListaPresenteProdutos extends Controller{

	function checkLicence() {

		if (!file_exists( DIR_APPLICATION . '../admin/controller/module/futura/futuralistapresente.dat' )) {
			$this->session->data['warning'] = 'Licença inválida! Contate o suporte da loja para identificar o problema. Módulo: Lista de Presentes | Código de erro: 01';
			$this->redirect( $this->url->link( 'account/account', '', 'SSL' ) );
		}
		else {
			require_once( DIR_APPLICATION . '../admin/controller/module/futura/futuralistapresente.dat' );
		}


		if (!$licenca->verifyValidade(  )) {
			$this->session->data['warning'] = 'Licença inválida! Contate o suporte da loja para identificar o problema. Módulo: Lista de Presentes | Código de erro: 03';
			$this->redirect( $this->url->link( 'account/account', '', 'SSL' ) );
		}

	}

	function index(){
		$this->checkLicence();

		if (!$this->config->get( 'listapresente_status' )) {
			$this->redirect( $this->url->link( 'common/home', '', 'SSL' ) );
		}

		if (!isset( $this->request->get['id_lista'] )) {
			$this->redirect( $this->url->link( 'listapresente/listapresente', '', 'SSL' ) );
		}
		else {
			$lista_id = $this->request->get['id_lista'];
		}

		$this->language->load( 'listapresente/produto' );
		$this->document->addScript( 'catalog/view/javascript/jquery/tabs.js' );
		$this->document->addScript( 'https://maps.googleapis.com/maps/api/js?key=AIzaSyB6Dk4DrNLQ76wbYsdo8pjFJg3mmvQitmU&sensor=true', false);
		$this->load->model( 'listapresente/listapresente' );
		$this->load->dmodel( 'tool/image' );
		$this->load->helper('ftr_geral');
		$this->data['button_cart'] = $this->language->get( 'button_cart' );
		$lista_info = $this->model_listapresente_listapresente->getLista( $lista_id );

		$this->data['not_buy'] = (isset($lista_info) && ($lista_info['cliente_id'] == $this->customer->getId())) ? true : false ;

		if (isset( $lista_info )) {
			$this->data['nome'] = $lista_info['nome'];
		}
		else {
			$this->data['nome'] = '';
		}

		if (isset( $lista_info )) {
			$this->data['lista_id'] = $lista_info['id'];
		}
		else {
			$this->data['lista_id'] = '';
		}

		if (isset( $lista_info )) {
			$this->data['validade'] = implode( '/', array_reverse( explode( '-', $lista_info['validade'] ) ) );
		}
		else {
			$this->data['validade'] = '';
		}

		if (isset( $lista_info )) {
			$this->data['evento'] = implode( '/', array_reverse( explode( '-', $lista_info['evento'] ) ) );
		}
		else {
			$this->data['evento'] = '';
		}

		if (isset( $lista_info )) {
			$this->data['cliente'] = $lista_info['cliente'];
			$this->data['cliente_id'] = $lista_info['cliente_id'];
		}
		else {
			$this->data['cliente'] = '';
			$this->data['cliente_id'] = '';
		}

		if (isset( $lista_info )) {
			$this->data['categoria'] = $lista_info['categoria'];
		}
		else {
			$this->data['categoria'] = '';
		}

		if (isset( $lista_info )) {
			$this->data['parceiro'] = $lista_info['parceiro'];
		}
		else {
			$this->data['parceiro'] = '';
		}

		if (isset( $lista_info )) {
			$this->data['cep'] = $lista_info['cep'];
		}
		else {
			$this->data['cep'] = '';
		}

		if (isset( $lista_info )) {
			$this->data['logradouro'] = $lista_info['logradouro'];
		}
		else {
			$this->data['logradouro'] = '';
		}

		if (isset( $lista_info )) {
			$this->data['numero'] = $lista_info['numero'];
		}
		else {
			$this->data['numero'] = '';
		}

		if (isset( $lista_info )) {
			$this->data['complemento'] = $lista_info['complemento'];
		}
		else {
			$this->data['complemento'] = '';
		}

		if (isset( $lista_info )) {
			$this->data['bairro'] = $lista_info['bairro'];
		}
		else {
			$this->data['bairro'] = '';
		}

		if (isset( $lista_info )) {
			$this->data['cidade'] = $lista_info['cidade'];
		}
		else {
			$this->data['cidade'] = '';
		}

		if (isset( $lista_info )) {
			$this->data['estado'] = $lista_info['estado_nome'];
		}
		else {
			$this->data['estado'] = '';
		}

		$this->data['futuragrade_abrev_title_specification'] = (ftr_geral::isIsset($this->config->get('futuragrade_abrev_title_specification')) && $this->config->get('futuragrade_abrev_title_specification')!= "") ? ucwords($this->config->get('futuragrade_abrev_title_specification').'.:') : $this->language->get('text_abrev_title_especificacao');
		$valor_venda_confirmada                              = $this->model_listapresente_listapresente->ValorTotalVendaConfirmadaByLista( $lista_info['id'] );
		$valor_total_itens_disponiveis                       = $this->model_listapresente_listapresente->ValorTotalItensDisponiveisByLista( $lista_info['id'] );
		$valor_total_pedido                                  = $this->model_listapresente_listapresente->ValorTotalItensPedidoByLista( $lista_info['id'] );
		$this->data['valor_venda_confirmada']                = $this->currency->format( $valor_venda_confirmada );
		$this->data['valor_total_itens_disponiveis']         = $this->currency->format( $valor_total_itens_disponiveis );
		$this->data['valor_total_pedido']                    = $this->currency->format( $valor_total_pedido );
		$this->data['valor_total_lista']                     = $this->currency->format($valor_total_itens_disponiveis );
		$this->data['produtos']                              = array();
		$this->data['totalProdutosEstoque']                  = 0;
		$this->data['totalProdutosComprados']                = 0;

		if ($lista_info) {
			$produtos_info = $this->model_listapresente_listapresente->GetProdLista($lista_id);

			if ($produtos_info) {
				foreach ($produtos_info as $produto) {
					if ($produto['imagem']) {
                        $watermark_config_date_number = $this->dmodel_tool_image->getWatermarkCacheNumber();
                        $image_version_number = '?version=' . preg_replace("/[^0-9]/", "", $produto['data_atualizacao_replicacao']) . $watermark_config_date_number;

                        $imagem = $this->dmodel_tool_image->resizeWithWatermark($produto['imagem'],
                                $this->config->get( 'futuralistapresente_config_image_lista_width' ),
                                $this->config->get( 'futuralistapresente_config_image_lista_height' ) ) . $image_version_number;
					}
					else {
						$imagem = $this->dmodel_tool_image->resize('data/sem-imagem.png', $this->config->get('futuralistapresente_config_image_lista_width'), $this->config->get('futuralistapresente_config_image_lista_height'));
					}

					if ((float)$produto['special']) {
						$special = $this->currency->format($produto['special']);
					} else {
						$special = false;
					}

					$opcoes = '';
					if ($produto['opcoes']) {
						foreach ($produto['opcoes'] as $opcao) {
							$opcoes .= '<span>' . $opcao['nome_opcao'] . ' = ' . $opcao['valor_opcao'] . '</span><br />';
						}
					}

					//KIT
					$this->load->dmodel('catalog/product');
					$itens_kit = $this->dmodel_catalog_product->getProductKitItens($produto['product_kit_id']);
					//KIT

					$this->data['produtos'][] = array(
						'item'                      => $produto['item_id'],
						'id_prod'                   => $produto['id'],
						'nome'                      => $produto['nome'],
						'href'                      => $this->url->link('product/product', '&product_id=' . $produto['id'], 'SSL'),
						'imagem'                    => $imagem,
						'special'                   => $special,
						'qtde'                      => $produto['qtde'],
						'qtdeComp'                  => $produto['qtdeComp'],
						'totalItens'                => $produto['qtde'] - $produto['qtdeComp'],
						'valor'                     => $this->currency->format( $produto['valor'] ),
						'preco'                     => $produto['valor'],
						'porcentagemDesconto'       => ftr_geral::calculaDescontoPromocao($produto['valor'], $produto['special']),
						'opcoes'                    => $opcoes,
						'color_description'         => ($this->config->get('futuragrade_status')) ? $produto['color_description'] : '',
						'size_description'          => ($this->config->get('futuragrade_status')) ? $produto['size_description'] : '',
						'specification_description' => ($this->config->get('futuragrade_status')) ? $produto['specification_description'] : '',
						'opcoes2'                   => $produto['opcoes'],
						'itens_kit' 				=> $itens_kit
					);
						$this->data['totalProdutosComprados'] += $produto['qtdeComp'];
						$this->data['totalProdutosEstoque'] += $produto['qtde'] ;

					}
				}
				else {
					$this->session->data['warning'] = $this->language->get( 'text_produto_empty' );
					$this->redirect( $this->url->link( 'listapresente/listapresente/buscalista', '', 'SSL' ) );
				}
			}

			$languages = $this->language->load( 'listapresente/produto' );
			foreach ($languages as $k => $v) {
				$this->data[$k] = $v;
			}

			$this->document->setTitle(sprintf( $this->language->get( 'heading_title' ), $lista_info['cliente'] ));
			$this->data['heading_title'] = sprintf( $this->language->get( 'heading_title' ), $lista_info['cliente'] );
			$this->data['breadcrumbs']   = array(  );
			$this->data['breadcrumbs'][] = array( 'text' => $this->language->get( 'text_home' ), 'href' => $this->url->link( 'common/home' ), 'separator' => false );
			$this->data['breadcrumbs'][] = array( 'text' => $this->language->get( 'text_listapresente_busca' ), 'href' => $this->url->link( 'listapresente/listapresente/buscalista', '', 'SSL' ), 'separator' => $this->language->get( 'text_separator' ) );
			$this->data['breadcrumbs'][] = array( 'text' =>  sprintf( $this->language->get( 'heading_title' ),
			$lista_info['cliente'] ), 'href' => $this->url->link( 'listapresente/produtos', 'id_lista='.$lista_id ), 'separator' => $this->language->get( 'text_separator' ) );
			$this->data['title_presentes'] = $this->language->get( 'title_presentes' );

			$this->breadcrumbs->setbreadcumbs($this->data['breadcrumbs']);

			if (file_exists( DIR_TEMPLATE . $this->config->get( 'config_template' ) . '/template/listapresente/produtos.tpl' )) {
				$this->template = $this->config->get( 'config_template' ) . '/template/listapresente/produtos.tpl';
			}
			else {
				$this->template = 'default/template/listapresente/produtos.tpl';
			}

			$this->data['futuralistapresente_Exibe_Totais'] = $this->config->get('futuralistapresente_Exibe_Totais');
			$this->data['futuralistapresente_Exibe_Coluna_Estoque_Vendido'] = $this->config->get('futuralistapresente_Exibe_Coluna_Estoque_Vendido');
			$this->data['futuragrade_status'] = $this->config->get('futuragrade_status');

			$this->children = array( 'common/breadcrumbs', 'common/column_left', 'common/column_right', 'common/content_top', 'common/content_bottom', 'common/footer', 'common/header' );
			
			$this->data['text_de'] = $this->language->get('text_de');
			$this->data['text_por'] = $this->language->get('text_por');
			
			
			$this->response->setOutput( $this->render(  ) );

		}


		public function addtocart() {
			$this->load->type('tipocomum');
			$this->checkLicence(  );

			if (!$this->config->get( 'listapresente_status' )) {
				$this->redirect( $this->url->link( 'common/home', '', 'SSL' ) );
			}

			$this->language->load( 'checkout/cart' );
			$json = array();

			if (isset( $this->request->post['produto'] )) {
				$product_id = $this->request->post['produto'];
			}
			else {
				$product_id = 1;
			}

			if (isset( $this->request->post['qtde'] )) {
				$quantity = $this->request->post['qtde'];
			}
			else {
				$quantity = 1;
			}

			if(isset($this->request->get['not_buy']) && ($this->request->get['not_buy'])){
				$json['error']['not_buy'] = 'Você não pode comprar produtos da sua lista de presente.' ;
			}

			if (isset( $this->session->data['cartxitem'][$this->request->get['lista_id']][$this->request->post['item']] )) {
				if ($this->session->data['cartxitem'][$this->request->get['lista_id']][$this->request->post['item']]['qtde'] == $this->request->post['qtdeorig']) {
					$json['error']['qtde'] = 'Você ja adicionou a quantidade máxima deste item no seu carrinho.';
				}

			 if(($this->session->data['cartxitem'][$this->request->get['lista_id']][$this->request->post['item']]['qtde'] + $this->request->post['qtdeComp'] + $quantity) > $this->request->post['qtdeorig']){
			 	$json['error']['qtde'] = 'Você ja adicionou a quantidade máxima desejada, disponível para compra.';
			 }

			}

			if (( !isset( $this->session->data['cartxitem'] ) && 0 < $this->cart->getTotal(  ) )) {
				$json['error']['carrinho'] = 'Você adicionou produtos em seu carrinho. Finalize esse pedido ou esvazie seu carrinho para comprar este presente.';
			}

			if (isset( $this->session->data['cartxitem'] )) {
				foreach ($this->session->data['cartxitem'] as $k => $v) {

					if (( $k != 'cliente' && $k != $this->request->get['lista_id'] )) {
						$json['error']['lista'] = 'Voçê não pode adicionar produtos de outra lista de presentes no mesmo carrinho. Finalize sua compra da lista atual ou esvazie seu carrinho para poder comprar desta lista.';
						continue;
					}

				}
			}

			$this->load->model( 'catalog/product' );
			$product_info = $this->model_catalog_product->getProduct( $product_id );

			if ($product_info) {

				if (isset( $this->request->post['opcoes'] )) {
					$option = array_filter( $this->request->post['opcoes'] );
				}
				else {
					$option = array();
				}

				$product_options = $this->model_catalog_product->getProductOptions( $this->request->post['produto'] );
				foreach ($product_options as $product_option) {
					if (( $product_option['required'] && empty( $option[$product_option['product_option_id']] ) )) {
						$json['error']['option'][$product_option['product_option_id']] = sprintf( $this->language->get( 'error_required' ), $product_option['name'] );
						continue;
					}
				}

				if( ($this->config->get('futuralimitaritem_status') == Type_Status::Tp_Habilitado) && (($this->config->get('tipopessoa') == Type_CadastroPessoa::Tp_Ambos) || ($this->config->get('tipopessoa') == $this->customer->getTipo_pessoa())) ){
					if ($this->config->get('tipolimite')== Type_LimitacaoItems::Tp_Qtdtotalitens){
						if (($quantity+$this->cart->countProducts())>($this->config->get('qtd_maxitemcart'))){
							$json['error']['errmaxitemcart'] = sprintf($this->language->get('text_limiteitens'),$this->config->get('qtd_maxitemcart'), $this->url->link('checkout/checkout'));
						}
					}else{
						if (($this->cart->countVariedadeProducts($product_id))>($this->config->get('qtd_maxitemcart'))){
							$json['error']['errmaxitemcart'] = sprintf($this->language->get('text_limiteitens'),$this->config->get('qtd_maxitemcart'), $this->url->link('checkout/checkout'));
						}
					}
				}

				if (!$json) {
					$this->cart->add( $this->request->post['produto'], $quantity, $option, 0 );

					if (isset( $this->session->data['cartxitem'][$this->request->get['lista_id']][$this->request->post['item']] )) {
						$quantity += $this->session->data['cartxitem'][$this->request->get['lista_id']][$this->request->post['item']]['qtde'];
						$this->session->data['cartxitem'][$this->request->get['lista_id']][$this->request->post['item']] = array( 'produto' => $product_id, 'qtde' => $quantity );
					}
					else {
						$this->session->data['cartxitem']['cliente'] = $this->request->get['cliente_id'];
						$this->session->data['cartxitem'][$this->request->get['lista_id']][$this->request->post['item']] = array( 'produto' => $product_id, 'qtde' => $quantity );
					}

					$json['success'] = sprintf( $this->language->get( 'text_success' ), $this->url->link( 'product/product', 'product_id=' . $this->request->post['produto'] ), $product_info['name'], $this->url->link( 'checkout/cart' ) );
					unset( $this->session->data['shipping_method'] );
					unset( $this->session->data['shipping_methods'] );
					unset( $this->session->data['payment_method'] );
					unset( $this->session->data['payment_methods'] );
					$this->load->model( 'setting/extension' );
					$total_data = array(  );
					$total = 0;

					if (( ( $this->config->get( 'config_customer_price' ) && $this->customer->isLogged(  ) ) || !$this->config->get( 'config_customer_price' ) )) {
						$sort_order = array(  );
						$results = $this->model_setting_extension->getExtensions( 'total' );
						foreach ($results as $key => $value) {
							$sort_order[$key] = $this->config->get( $value['code'] . '_sort_order' );
						}

						array_multisort( $sort_order, SORT_ASC, $results );
						foreach ($results as $result) {
							if ($this->config->get( $result['code'] . '_status' )) {
								$this->load->model( 'total/' . $result['code'] );
								$this->{'model_total_' . $result['code']}->getTotal($total_data, $total);
							}

							$sort_order = array();
							foreach ($total_data as $key => $value) {
								$sort_order[$key] = $value['sort_order'];
							}

							array_multisort( $sort_order, SORT_ASC, $total_data );
						}
					}

					$json['total'] = sprintf( $this->language->get( 'text_items' ), $this->cart->countProducts(  ) + (isset( $this->session->data['vouchers'] ) ? count( $this->session->data['vouchers'] ) : 0), $this->currency->format( $total ) );
				}
            }

			$this->response->setOutput( json_encode( $json ) );
		}

		/* COMECO - Função que calcula a diferença quantodade de dias para mostrar ou nao o selo de produto novo - por Henrique R. Pohl */
		public function validaSeloNovo($originalData, $qtdDiasNovo ){

			$dataAddProduto = new DateTime($originalData);
			$dataAtual      = new DateTime(date("Y-m-d"));
			$diferenca      = $dataAddProduto->diff($dataAtual);
			$dataDias       = $diferenca->days;

			if ($dataDias < $qtdDiasNovo) {
				return true;
			} else {
				return false;
			}

		}
		/* FIM - Função que calcula a diferença quantodade de dias para mostrar ou nao o selo de produto novo - por Henrique R. Pohl */

	}
