<?php
class ModelFuturaListapresente extends Model {

	public function addCategorias($description) {
		$this->db->query( "INSERT INTO futura_categorias_listas (desc_cat_lista) VALUES ('$description')" );

		return $this->getCategorias();
	}

	public function updateDescriptionCategorias($description, $id){
        $this->db->query( " UPDATE futura_categorias_listas SET desc_cat_lista = '$description' WHERE id_cat_lista = $id " );

        return $this->getCategorias();
    }

	public function removeCategorias($id){
        $this->load->model('setting/setting');

        $this->db->query("DELETE FROM `futura_categorias_listas` WHERE `id_cat_lista` = $id");

        return true;
    }

	public function getCategorias() {
		$query = $this->db->query( 'SELECT * FROM futura_categorias_listas' );
		return $query->rows;
	}

	public function getListaByPedido($pedido = null) {
		$query = $this->db->query( 'SELECT * FROM `futura_listas` LEFT JOIN `futura_pedidos_itens_listas` ON ped_lista_id = id_lista JOIN ' . DB_PREFIX . ( '' . 'customer ON customer_id = lista_id_cliente  WHERE id_pedido = ' . $pedido ) );
		$lista = array();

		if ($query->row) {
			$lista = array( 'id' => $query->row['id_lista'], 'nome' => $query->row['nome_lista'], 'validade' => $query->row['data_valid_lista'], 'cadastro' => $query->row['data_cad_lista'], 'evento' => $query->row['data_eve_lista'], 'cliente' => $query->row['firstname'] . ' ' . $query->row['lastname'], 'cliente_id' => $query->row['lista_id_cliente'], 'parceiro' => $query->row['id_cliente_parc_lista'], 'status' => $query->row['status_lista'], 'frase' => $query->row['lista_frase'] );
		}

		return $lista;
	}

	public function GetItensPedido($pedido = null) {
		$itens = array();

		if ($pedido) {
			$sql = '' . 'SELECT * FROM futura_pedidos_itens_listas WHERE id_pedido = ' . $pedido . '; ';
			$query=$this->db->query( $sql );

			if ($query->rows) {
				$itens[]=$query->rows;
			}
		}

		return $itens;
	}

	public function getLista($lista_id) {
		$query= $this->db->query( 'SELECT * FROM futura_listas sl
                                        LEFT JOIN futura_categorias_listas scl ON scl.id_cat_lista = sl.categoria_id_cat_lista
                                        JOIN ' . DB_PREFIX . 'customer ON customer_id = lista_id_cliente
                                        LEFT JOIN ' . DB_PREFIX . 'zone z ON z.`zone_id` = sl.`estado`
                                    WHERE id_lista = ' . (int)$lista_id );
		$lista = array(  );

		if ($query->row) {
			$lista = array( 'id' => $query->row['id_lista'], 'nome' => $query->row['nome_lista'], 'validade' => $query->row['data_valid_lista'], 'cadastro' => $query->row['data_cad_lista'], 'evento' => $query->row['data_eve_lista'], 'cliente' => $query->row['firstname'] . ' ' . $query->row['lastname'], 'cliente_id' => $query->row['lista_id_cliente'], 'categoria' => $query->row['desc_cat_lista'], 'categoria_id' => $query->row['categoria_id_cat_lista'], 'parceiro' => $query->row['id_cliente_parc_lista'], 'status' => $query->row['status_lista'], 'frase' => $query->row['lista_frase'], 'logradouro' => $query->row['logradouro'], 'numero' => $query->row['numero'], 'bairro' => $query->row['bairro'], 'cep' => $query->row['cep'], 'cidade' => $query->row['cidade'], 'estado' => $query->row['name'], 'latitude' => $query->row['latitude'], 'longitude' => $query->row['longitude'], 'produtos' => $this->GetProdLista( $query->row['id_lista'] ) );
		}

		return $lista;
	}

	public function GetProdLista($lista_id, $options = array(  )) {
		if ($lista_id) {
			$filters = '';

			if ($options) {
				foreach ($options as $k => $v ) {
					$filters .= '' . 'AND ' . $k . ' = \'' . $v . '\'';
				}
			}

			$sql = 'SELECT
                        spl.id_item_lista as item_id,
                        (SELECT pd.`name` FROM ' . DB_PREFIX . ( '' . 'product_description pd WHERE spl.item_id_produto = pd.`product_id` AND pd.language_id ='. (int)$this->config->get( 'config_language_id' ) .' ) AS nome,
                        spl.qtde_item_lista as qtde,
                        p.price as valor,
                        p.image as imagem,
                        p.data_atualizacao_replicacao,
                        spl.item_id_produto,
                        (SELECT COUNT(ped_item_id_produto) FROM futura_pedidos_itens_listas spil WHERE spil.ped_lista_id = ' . $lista_id . ' AND spil.ped_item_id_produto = spl.item_id_produto AND spil.ped_id_item_lista = spl.`id_item_lista` AND status_pedido = ' ) . (int)$this->config->get( 'config_complete_status_id' ) . ( '' . ') AS qtdeComp,
                        (SELECT COUNT(ped_item_id_produto) FROM futura_pedidos_itens_listas spil WHERE spil.ped_lista_id = ' . $lista_id . ' AND spil.ped_item_id_produto = spl.item_id_produto AND spil.ped_id_item_lista = spl.`id_item_lista` AND status_pedido != 0 ) AS totalItensPedidos
                    FROM futura_itens_lista spl
                    LEFT JOIN ' ) . DB_PREFIX . ( '' . 'product p ON p.product_id = spl.item_id_produto
                    WHERE spl.listas_id_lista = ' . $lista_id . ' ' . $filters . ' ' );

			$query=$this->db->query( $sql );
			$produtos = array( );
			foreach ($query->rows as $item) {
				$produtos[] = array( 'item_id' => $item['item_id'], 'imagem' => $item['imagem'], 'data_atualizacao_replicacao' => $item['data_atualizacao_replicacao'], 'qtde' => $item['qtde'], 'nome' => $item['nome'], 'valor' => $item['valor'], 'qtdeComp' => $item['qtdeComp'], 'totalItensPedidos' => $item['totalItensPedidos'], 'id' => $item['item_id_produto'], 'opcoes' => $this->getOpcoesProduto( $item['item_id'] ) );
			}

			return $produtos;
		}

	}

	public function getCompProd($lista_id, $item_id) {
		$query=$this->db->query( 'SELECT DISTINCT
                      `firstname` as nome,
                      `lastname` as sobrenome,
                      `email`,
                      `telephone` as fone
                    FROM
                      `' . DB_PREFIX . ( '' . 'order` o
                      RIGHT JOIN futura_pedidos_itens_listas spil
                        ON o.`order_id` = spil.`id_pedido`
                     WHERE spil.`ped_lista_id` = ' . $lista_id . ' AND spil.`ped_item_id_produto` = ' . $item_id . ' AND spil.`status_pedido` > 0' ) );
		return $query->rows;

	}

	public function getOpcoesProduto($id_item) {
		$query = $this->db->query( '' . 'SELECT
                              `nome_opcao`,
                              `valor_opcao`,
                              `op_id_opcao`,
                              `op_id_item_lista`,
                              `op_lista_id`,
                              `op_item_id_produto`,
                              `op_parent_opcao`,
                              `op_array`
                            FROM `futura_opcoes_produto` WHERE op_id_item_lista = ' . $id_item );
		return $query->rows;

	}

	public function getListas($options = array(  )) {
		$limit = '';

		if ($options) {
			if (( isset( $options['start'] ) || isset( $options['limit'] ) )) {
				if ($options['start'] < 0) {
					$options['start'] = 0;
				}


				if ($options['limit'] < 1) {
					$options['limit'] = 20;
				}

				$limit = ' LIMIT ' . (int)$options['start'] . ',' . (int)$options['limit'];
			}
		}

		$query = $this->db->query( 'SELECT *,
            (SELECT SUM(qtde_item_lista) FROM futura_itens_lista WHERE listas_id_lista = id_lista )  AS qtde,
            (SELECT COUNT(ped_lista_id) FROM futura_pedidos_itens_listas WHERE ped_lista_id = id_lista AND status_pedido = ' . (int)$this->config->get( 'config_complete_status_id' ) . ' ) AS totalVendido,
            (SELECT COUNT(ped_lista_id) FROM futura_pedidos_itens_listas WHERE ped_lista_id = id_lista AND status_pedido != 0  ) AS totalPedido
            FROM `futura_listas` JOIN futura_categorias_listas ON categoria_id_cat_lista = id_cat_lista JOIN ' . DB_PREFIX . ( '' . 'customer ON customer_id = lista_id_cliente WHERE 1=1 ORDER BY data_eve_lista ASC ' . $limit . ' ' ) );

		return $query->rows;
	}

	public function getCompLista($lista_id) {
		$query=$this->db->query( 'SELECT DISTINCT
                      `firstname` as nome,
                      `lastname` as sobrenome,
                      `email`,
                      `telephone` as fone
                    FROM
                      `' . DB_PREFIX . ( '' . 'order` o
                      RIGHT JOIN futura_pedidos_itens_listas spil
                        ON o.`order_id` = spil.`id_pedido`
                     WHERE spil.`ped_lista_id` = ' . $lista_id . ' AND status_pedido > 0' ) );
		return $query->rows;
	}

	public function updateStatusItemPedido($itens = array(  ), $status = null) {
		if (( $itens && $status )) {
			foreach ($itens as $k => $iten ) {
				foreach($iten as $k => $v){
					$this->db->query( '' . 'UPDATE futura_pedidos_itens_listas SET status_pedido = ' . $status . ' WHERE id_pedido = ' . $v['id_pedido'] );
				}
			}
		}

		return true;
	}

	public function devolveEstoqueItem($itens = array(  )) {
		if ($itens) {
			foreach ($itens as $k => $v) {
				$this->db->query( '' . 'UPDATE futura_itens_lista SET qtde_item_lista = (qtde_item_lista + 1) WHERE id_item_lista = ' . $v['ped_id_item_lista'] );
				$this->db->query( '' . 'DELETE FROM futura_pedidos_itens_listas WHERE id_pedido = ' . $v['id_pedido'] );
			}
		}
	}

	public function getTotalListas() {
		$query = $this->db->query('SELECT COUNT(id_lista) as total FROM `futura_listas`');
		return $query->row['total'];
	}

	public function getPedidosByListas() {
		$query=$this->db->query( 'SELECT * FROM `' . DB_PREFIX . 'order` WHERE order_id IN (SELECT DISTINCT id_pedido FROM futura_pedidos_itens_listas)' );
		return $query->rows;
	}

	public function ValorTotalVendaConfirmadaByLista($lista_id) {
		$query=$this->db->query( 'SELECT
                                      SUM(total) as total
                                    FROM
                                      ' . DB_PREFIX . 'order_product
                                    WHERE order_id IN
                                      (SELECT DISTINCT
                                        id_pedido
                                      FROM
                                        futura_pedidos_itens_listas
                                      WHERE status_pedido = ' . (int)$this->config->get( 'config_complete_status_id' ) . '
                                        AND ped_lista_id = ' . (int)$lista_id . ')' );
		return $query->row['total'];

	}

	public function ValorTotalItensDisponiveisByLista($lista_id) {
		$query=$this->db->query( 'SELECT
                                      SUM(p.`price` * qtde_item_lista) AS total
                                    FROM
                                      futura_itens_lista
                                      JOIN ' . DB_PREFIX . 'product p
                                        ON product_id = item_id_produto
                                        WHERE listas_id_lista =  ' . (int)$lista_id );
		return $query->row['total'];

	}

	public function ValorTotalItensPedidoByLista($lista_id) {
		$query=$this->db->query( 'SELECT
                                      SUM(total) as total
                                    FROM
                                      ' . DB_PREFIX . 'order_product
                                    WHERE order_id IN
                                      (SELECT DISTINCT
                                        id_pedido
                                      FROM
                                        futura_pedidos_itens_listas
                                      WHERE status_pedido != 0
                                        AND ped_lista_id = ' . (int)$lista_id . ')' );
		return $query->row['total'];
	}
}

