<?php
/**
 * Created by JetBrains PhpStorm.
 * User: Luis
 * Date: 16/12/13
 * Time: 20:55
 * To change this template use File | Settings | File Templates.
 */

use Fuel\Core\DB;
use Fuel\Core\Response;
use \Parser\View;
use Auth\Auth;

class Controller_Listacompra_Index extends \Controller_App{

    //Variable para guardar las migas de pan que van a aparecer en las vistas
    private $_bc = array();

    //Array con los elementos del menu que se deben marcar con la clase "active" para que esten seleccionados en el menu.
    private $_option_menu=array('Lista de la compra');

    public function before()
    {
        //Se cargan funciones de javascript especificas de esta funcionalidad
	    Casset::js('listacompra/index.js');

	    //Extraemos la información de las recetas de la semana
	    $recipes = Model_Recipe::get_recipes_current_week();

	    //PEDIR INGREDIENTES
	    //Recorremos las recetas para obtener los ingredientes.
	    //**AVISO: Si ya se han cargado los ingredientes de una de las recetas, no se vuelve a pedir. Por lo tanto si algo cambia esa semana, no se cambiarán.
	    foreach ($recipes as $recipe)
	    {
			$recipe->load_ingredients();
		}

        parent::before();
    }

	/**
	 * @desc Muestra la lista de la compra
	 * @return Response
	 */
    public function action_index()
    {
        $view = View::forge('listacompra/index.twig');

	    //Extraemos la información de las recetas de la semana
	    $recipes = Model_Recipe::get_recipes_current_week();

	    //Recogemos los identificadores de las recetas
	    $recipe_ids = array();
	    foreach ($recipes as $recipe)
	    {
	    	$recipe_ids[] = $recipe->id;
	    }

	    //En caso de que haya recetas, llamamos a una funcion que nos devuelve los ingredientes, sin repetir ninguno.
	    $view->ingredients = count($recipe_ids)>0 ? Model_Ingredient::get_ingredients_week($recipe_ids) : array();

        //Titulo de la vista
        $view->title = "Lista de la Compra";

        //Paso de las migas de pan a la vista
        $view->bc = $this->_bc;

        //Paso de las opciones de menu que deben aparecer seleccionadas
        $view->option_menu = $this->_option_menu;

        //Pasar la leyenda para la info funcionamiento de la página
        $view->leyenda = "En esta pantalla se han cargado todos los ingredientes necesarios para realizar el menú personalizado que has elegido. Puedes añadir ingredientes nuevos, eliminar algunos o eliminarlos todos. Ten siempre tu lista de la compra a mano. Te damos la posibilidad de hacer la compra a través de  la web  DelSuper  en el supermercado que prefieras en un solo click. Si pulsas en el botón hacer compra en Del Super te redireccionamos a su web con todos estos ingredientes seleccionados. Ojo! Solamente se enviarán al DelSuper los ingredientes seleccionados de los propuestos por la aplicación. Los ingredientes añadidos manualmente no.";

        return Response::forge($view);
    }

	/**
	 *
	 * @desc Elimina todos los ingredientes de la semana
	 *
	 */
    public function get_delete_all()
    {
    	//Obtenemos las recetas de la semena
    	$recipes = Model_Recipe::get_recipes_current_week();

    	//Recorremos las recetas
	    foreach ($recipes as $recipe)
	    {
	    	//Obtenemos todos los ingredientes de cada receta
	    	foreach ($recipe->all_ingredients as $ingrediente)
		    {
		    	//Vamos eliminando uno a uno los ingredientes
			    $ingrediente->delete();
		    }
	    }

	    //Notificamos que toodo a funcionado correctamente
	    $this->notify("success","Se han borrado los ingredientes correctamente");

	    //Redireccionamos a la página anterior
	    return Response::redirect_back();
    }

	/**
	 * @desc Elimina los ingredientes pasando por post el campo ingrediente_id (identficador en la bbdd iNutralia)
	 *
	 */
    public function post_delete_ingredients()
    {
    	//Recogemos los identificadores de ingredientes que se desea eliminar
    	$ingredients = Input::post('ingredients_ids');

    	//Comprobamos si se ha enviado algún ingrediente
    	if(count($ingredients)>0)
	    {
	    	//Buscamos en la bbdd los ingredientes pedidos
		    $ingredients = Model_Ingredient::query()->where('ingredient_id','IN', $ingredients)->get();

		    //Si no se encuentran ingredientes, ocurrió un error.
		    if(!$ingredients)
		    {
			    //Notificamos un poco antes
		    	$this->notify("error","No se han marcados ingredientes para eliminar");
			    return;
		    }

		    //Recorremos los ingredientes, eliminando uno a uno.
	        foreach ($ingredients as $ingredient)
		    {
		        $ingredient->delete();
		    }

		    //Notificamos que las cosas han funcionado correctamente
		    $this->notify("success","Se han borrado los ingredientes marcados correctamente");

		    return;

	    }

	    //Notificamos el error
	    $this->notify("Error","No se han seleccionado ingredientes para eliminar.");
    }

	/**
	 * @desc Elimina los ingredientes utilizando el Identificador del ingrediente local
	 */
    public function post_delete_ingredients_ids()
    {
    	//Recogemos los identificadores indicados
    	$ingredients = Input::post('ingredients_ids');

    	//Solo entramos si se enviaron los identificadores
    	if(count($ingredients)>0)
	    {
	    	//Cargamos los ingredientes a través de sus Identificadores locales
		    $ingredients = Model_Ingredient::query()->where('id','IN', $ingredients)->get();

		    //Sino se encuentran ingredientes se sale
		    if(!$ingredients)
		    {
		    	return;
		    }

		    //Recorremos cada ingredientes y lo eliminamos
	        foreach ($ingredients as $ingredient)
		    {
		        $ingredient->delete();
		    }

		    //Notificamos que se ha eliminado correctamente los ingredientes
		    $this->notify("success","Se han borrado los ingredientes marcados correctamente");
	    }
    }

	/**
	 * @desc Añadimos ingredientes personalizados a nuestra bbdd local
	 * @return bool
	 */
    public function post_add_custom_ingredient()
    {
	    //Obtenemos descripción del nuevo ingrediente que se quiere incluir
	    $desc = Input::post('ingredient');

    	try
	    {
			//Obtenemos la receta personalizada de la semana
			$custom_recipe = Model_Recipe::get_custom_recipe();

			//Obtenemos los ingredientes personalizados de la semana
	        $ingredient = Model_Ingredient::query()->where('desc',$desc)->where('recipe_local_id',$custom_recipe->id)->get_one();

			//Si no existe el ingrediente, se crea y se guarda
	        if(!$ingredient)
		    {
			    $ingredient = Model_Ingredient::forge();
			    $ingredient->desc            = $desc;
			    $ingredient->recipe_local_id = $custom_recipe->id;

			    //Establecemos el atributo usado a SÍ para que nunca sea enviado a la lista de la compra
			    $ingredient->used            = 'S';
			    $ingredient->created_at      = date('Y-m-d H:i:s');
			    $ingredient->save();
		    }
		    else
		    {
		        return false;
		    }
	    }
	    catch (Exception $e)
	    {
	    	Log::error("Error al intentar generar Ingrediente personalizado:". $e->getMessage(). " Linea: ".$e->getLine()." Fichero: ".$e->getFile());
	    }

	    return true;
    }

	/**
	 * @desc se recibe un array con los ids de los ingredientes se van a cambiar a usado.
	 */
    public function post_use_ingredient()
    {
    	//Se recogen todos los ids de los ingredientes
    	$array = Input::post('ids_used');

    	//Si no llegan ids, no se hace nada
    	if(count($array)>0)
	    {
	    	//Cargamos las recetas de la semana y filtramos sobre los ingredientes que queremos modificar a usado
		    $recipes = Model_Recipe::recipes_current_week()->related('ingredients')->where('ingredients.ingredient_id', 'in', $array)->get();

		    //Recorremos las recetas
		    foreach ($recipes as $recipe)
		    {
		    	//Recorremos cada ingrediente y lo vamos marcado como usado
			    foreach ($recipe->ingredients as $ingredient)
			    {
				    $ingredient->used = 'S';
				    $ingredient->save();
			    }
		    }

	    }
	}

}