<?php

namespace App\Http\Controllers;
use App\Producto;
use App\TipoSocio;
use App\Bonificacion;
use App\Combo;
use App\ComboTipoSocio;
use App\ComboProducto;
use App\ListaPrecios;

use Illuminate\Http\Request;

class CombosController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
        $combos=Combo::with('tipo_socio')
                    ->get();
        return view('combos.lista',compact('combos'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
        $tiposSocios=TipoSocio::all();
        $productos=Producto::orderBy('nombre', 'ASC')->get();
        $bonificaciones=Bonificacion::all();
        $listas=ListaPrecios::all();
        return view('combos.nuevo',compact('tiposSocios','productos','bonificaciones','listas'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {

        $fecha_inicio= date_format(date_create($request->fecha_inicio),"Y/m/d");
        $fecha_final= date_format(date_create($request->fecha_final),"Y/m/d");
        //Crear nuevo combo
        $combo = new Combo();
        $combo->nombre = $request->nombre;
        $combo->eva = $request->eva;
        $combo->fecha_inicio = $fecha_inicio;
        $combo->fecha_final = $fecha_final;
        $combo->status = $request->status;
        $combo->save();

        if($combo->id){
            //Asignacion de tipos de socios
            foreach($request->tipo_socio as $socio){
                $comboTipoSocio = new ComboTipoSocio();
                $comboTipoSocio->id_combo = $combo->id;
                $comboTipoSocio->id_tipo_socio = $socio;
                $comboTipoSocio->save();
            }

            $i=0;
            while(isset($request->id_producto[$i])){
                $comboProducto = new ComboProducto();
                $comboProducto->id_combo = $combo->id;
                $comboProducto->id_producto = $request->id_producto[$i];
                $comboProducto->id_bonificacion = $request->id_bonificacion[$i];
                $comboProducto->cantidad = $request->cantidad[$i];
                $comboProducto->precio = $request->precio[$i];
                $comboProducto->subtotal = $request->subtotal[$i];
                $comboProducto->save();
                $i++;
            }
            $arrResponse = [
                'message' => 'Lista de precios guardada correctamente'
            ];
            return redirect()->route('marketing.combos')->with($arrResponse);
        }
        $arrResponse = [
            'message' => 'Error no se guardado correctamente'
        ];
        return redirect()->route('marketing.combos')->with($arrResponse);
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
        $combo=Combo::where('id',$id)->with('tipo_socio')->with('combo_productos')->first();
        //
        $tiposSocios=TipoSocio::all();
        $productos=Producto::orderBy('nombre', 'ASC')->get();
        $bonificaciones=Bonificacion::all();
        $listas=ListaPrecios::all();
        return view('combos.editar',compact('tiposSocios','productos','bonificaciones','listas','combo'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request,Combo $combo)
    {
        //
        $fecha_inicio= date_format(date_create($request->fecha_inicio),"Y/m/d");
        $fecha_final= date_format(date_create($request->fecha_final),"Y/m/d");
        //Actualizar combo
        $combo->nombre = $request->nombre;
        $combo->eva = $request->eva;
        $combo->fecha_inicio = $fecha_inicio;
        $combo->fecha_final = $fecha_final;
        $combo->status = $request->status;
        $combo->update();

        //Eliminar item lista
        ComboTipoSocio::where('id_combo', $combo->id)->delete();
        ComboProducto::where('id_combo', $combo->id)->delete();
        if($combo->id){
            //Asignacion de tipos de socios
            foreach($request->tipo_socio as $socio){
                $comboTipoSocio = new ComboTipoSocio();
                $comboTipoSocio->id_combo = $combo->id;
                $comboTipoSocio->id_tipo_socio = $socio;
                $comboTipoSocio->save();
            }

            $i=0;
            while(isset($request->id_producto[$i])){
                $comboProducto = new ComboProducto();
                $comboProducto->id_combo = $combo->id;
                $comboProducto->id_producto = $request->id_producto[$i];
                $comboProducto->id_bonificacion = $request->id_bonificacion[$i];
                $comboProducto->cantidad = $request->cantidad[$i];
                $comboProducto->precio = $request->precio[$i];
                $comboProducto->subtotal = $request->subtotal[$i];
                $comboProducto->save();
                $i++;
            }
            $arrResponse = [
                'message' => 'Lista de precios actualizada correctamente'
            ];
            return redirect()->route('marketing.combos')->with($arrResponse);
        }
        $arrResponse = [
            'message' => 'Error no se actualizo correctamente'
        ];
        return redirect()->route('marketing.combos')->with($arrResponse);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
        Combo::destroy($id);
        $comboProducto = ComboProducto::where('id_combo', $id)->delete();
        $comboTipoSocio = ComboTipoSocio::where('id_combo', $id)->delete();
        $arrResponse = [
            'message' => 'Combo eliminada correctamente'
        ];
        return redirect()->route('marketing.combos')->with($arrResponse);
    }
}
