<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\{Producto,Ticket,RenglonTicket,Contadora};

class CarritoController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
       
        return view('carrito.agregados');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        
       if (isset($_COOKIE['cliente'])) {
        $cantidad = $request['cantidad'];
        $ide= $request['ide'];
        if ($cantidad !=null && $ide !=null) {
            $producto=Producto::where('id',$ide)->first();
            $carrito = array();
            if (!$producto->existencia-$cantidad<0) {
                $carro=array($cantidad,$ide,$producto->nombre,$producto->portada,$producto->precio,$producto->existencia);
               /* $carro=[
                    "cantidad"=> $cantidad,
                    "ide"=> $ide,
                    "nombre"=> $producto->nombre,
                    "portada"=> $producto->portada ,
                    "precio"=>$producto->precio,
                    "existencia"=>$producto->existencia,
                ];*/
                $banAux=false;
                if (isset($_COOKIE['carrito'])) {
                    $carrito=unserialize($_COOKIE['carrito']);
                    $carAux= array();
                    foreach ($carrito as $car){
                        if ($ide== $car[1]) {
                            if (!($producto->existencia-($cantidad+$car[0])<0)) {
                                $carro[0]=$cantidad+$car[0];
                                $banAux=true;
                            }else {
                                return response()->json([
                                    'estado'=>'error',
                                    'mensaje'=>'No tenemos la cantidad de productos que solicita.'
                                ]);
                            }
                        }else{
                            array_push($carAux,$car);
                        }
                    }
                }
                    if ($banAux) {
                        $carrito=$carAux;
                    }
                        array_push($carrito,$carro);
                        //setcookie('carrito',"",time()-6000,"/");
                       
                       //dd($carrito);
                        $this->crearCookie($carrito);
                        //setcookie('carrito',serialize($carrito),time()+6000);
                return response()->json([
                    'estado'=>'success',
                    'mensaje'=>'Su producto fue agregado al carrito.',
                    'cantidad'=>$carro[0],
                    'precio'=>$carro[4],
                ]);

            }else{
                return response()->json([
                    'estado'=>'error',
                    'mensaje'=>'No tenemos la cantidad de productos que solicita.'
                ]);
            }
        }else{
            return response()->json([
                'estado'=>'error',
                'mensaje'=>'Ocurrió un error inténtelo de nuevo.'
            ]);
        }
       }else{
        return response()->json([
            'estado'=>'error',
            'mensaje'=>'Inicia sesión por favor.'
        ]);
       }
    }

    /**
     * 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)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        if (isset($_COOKIE['carrito'])) {
            $carrito=unserialize($_COOKIE['carrito']);
            //setcookie('carrito',"",time()-6000,"/");
            //dd($carrito);
            $carAux=array();
            foreach ($carrito as $car){
                if ($id==$car[1]) {
                   //echo "este no fue agregado";
                }else{
                    array_push($carAux,$car);

                }
            }
            
            //dd($carrito);

           //setcookie("carrito","",time()-3600,"/","127.0.0.1",1);
           //setcookie('carrito',"",time()-6000);
           //unset($_COOKIE['carrito']);
           //setcookie('carrito',serialize($carAux),time()+6000);
           $this->crearCookie($carAux);

           return response()->json([
                'estado'=>'success',
                'mensaje'=>'Elemento quitado del carrito.'
            ]);
        }
        return response()->json([
            'estado'=>'error',
            'mensaje'=>'No hay elementos.'
        ]);
    }
    public function listaCarritoAux(){
        //dd($_COOKIE['carrito'],"vista");
        return view('carrito.auxCarrito');
    }
    public function crearCookie($arrayCookie){

        //if (isset($_COOKIE['carrito'])) {
        //    unset($_COOKIE['carrito']);
        //}

        //$aux=unserialize($_COOKIE['carrito']);
        //dd($aux,$arrayCookie);

        setcookie('carrito',serialize($arrayCookie),time()+100000,'/');
        //setcookie('carrito',serialize($arrayCookie),time()+6000,'/');

        //setcookie('carrito',"hola",time()+6000);
        //echo serialize($arrayCookie);        
    }

    public function quitarUnoCarrito(Request $request){
        //dd($_COOKIE['carrito'],"vista");
        $cantidad = $request['cantidad'];
        $ide= $request['ide'];
        $producto=Producto::where('id',$ide)->first();
        if (isset($_COOKIE['carrito'])) {
            $carrito=unserialize($_COOKIE['carrito']);
            $carAux= array();
            $carro=null;
            foreach ($carrito as $car){
                if ($ide== $car[1]) {
                    if (($car[0]-$cantidad)>0) {
                        $carro=$car;
                        $carro[0]=$car[0]-$cantidad;
                    }else {
                        return response()->json([
                            'estado'=>'error',
                            'mensaje'=>'Si quieres quitar el elemento da clic en el botón eliminar.'
                        ]);;
                    }
                }else{
                    array_push($carAux,$car);
                }
            }
            array_push($carAux,$carro);
            $this->crearCookie($carAux);
            return response()->json([
                'estado'=>'success',
                'mensaje'=>'Se bajo la cantidad.',
                'cantidad'=>$carro[0],
                'precio'=>$carro[4],
            ]);
        }
        
    }

    public function metodoPago(){
        //dd(json_decode($_COOKIE['cliente']));

        if (isset($_COOKIE['cliente'])) {
            //sacamos el id del usuario
            $usuario=json_decode($_COOKIE['cliente']);
            $ide=$usuario->idAlumno;
        }else {
            return response()->json([
              'estado'=>'error',
              'mensaje'=>'Su sesión a caducado por favor inicie de nuevo.'
            ]);
        }

        $referencia =$this->generate_string();
        $valor=0;
        $fecha=explode(" ",now());
        $fecha=explode("-",$fecha[0]);
        $fecha=$fecha[1];   
        //$referencia.replace('',)
        $numero=Contadora::latest('id')->first();
        if($numero!=null){
            $updated_at=explode(" ",$numero->updated_at);
            $updated_at=explode("-",$updated_at[0]);
            $updated_at=$updated_at[1];
           if ($fecha==$updated_at) {
                $valor =$numero->id+1;
           }else{
            $valor =1;
           }
        }else{
            $valor =1;
            Contadora::create(['id'=>0]);
        }
        $referencia=$referencia.$this->completarValor($valor);
        if (isset($_COOKIE['carrito'])) {
            $cont=Contadora::latest('id')->first();
            $cont->id=$valor;
            $cont->save();

            $carrito=unserialize($_COOKIE['carrito']);
            $ticket=Ticket::create(['referencia'=>$referencia,'monto'=>0,'cliente_id'=>$ide,'estado_id'=>4]);
            $total=0;
            foreach ($carrito as $car){
                $ticketRenglon=RenglonTicket::create(['cantidad'=>$car[0],'precio'=>$car[4],'estado_id'=>2,'producto_id'=>$car[1],'ticket_id'=>$ticket->id]);
                $total=$total+($car[0]*$car[4]);
                $producto=Producto::where('id',$car[1])->first();
                $producto->existencia=$producto->existencia-$car[0];
                $producto->save();
            }
            $ticket->monto=$total;
            $ticket->save();
            setcookie('carrito',"",time()-100000,'/');


        }
        return response()->json([
            'estado'=>'success',
            'mensaje'=>'Referencia generada.',
            'referencia'=>$referencia,
            'id'=>$ide,
          ]);
    }
    public function referencias(){
        if (isset($_COOKIE['cliente'])) {
            $cliente=json_decode($_COOKIE['cliente']);
            $ticket=Ticket::where('cliente_id',$cliente->idAlumno)->with('renglonTicket')->with('estadoCompra')->orderBy('created_at','DESC')->get();
            return view('carrito.referencia',compact('ticket'));
        }else{
            return('<div class="text-center p-5"><a href="https://poa.zitacuaro.tecnm.mx/"  class="btn btn-info btn-round" title="Iniciar Seción">Iniciar Seción</a></div>'); 
               
        }
    }
    public function referenciaDetalles($id){
        if (isset($_COOKIE['cliente'])) {
            $cliente=json_decode($_COOKIE['cliente']);
            $ticket=Ticket::where('id',$id)->where('cliente_id',$cliente->idAlumno)->with('renglonTicket.renProducto')->with('estadoCompra')->with('renglonTicket.renEstados')->first();
            return view('carrito.referenciaDetalle',compact('ticket'));
        }else{
            return('<div class="text-center p-5"><a href="https://poa.zitacuaro.tecnm.mx/"  class="btn btn-info btn-round" title="Iniciar Seción">Iniciar Seción</a></div>'); 
               
        }
    }
    public function pagoVentanilla($id){

            $ticket=Ticket::where('referencia',$id)->with('renglonTicket.renProducto')->with('estadoCompra')->with('renglonTicket.renEstados')->first();
            if ($ticket!=null) {
                $ticket->estado_id=3;
                $ticket->save();
                return response()->json([
                    'estado'=>'success',
                    'mensaje'=>'Pago enviado para revisar.',
                  ]);
            }else{
                return response()->json([
                    'estado'=>'error',
                    'mensaje'=>'No existe esa referencia.',
                  ]);
            }
    }
    public function aceptarPagoVentanilla($id){

        $ticket=Ticket::where('referencia',$id)->with('renglonTicket.renProducto')->with('estadoCompra')->with('renglonTicket.renEstados')->first();
        if ($ticket!=null) {
            $ticket->estado_id=1;
            $ticket->save();
            return response()->json([
                'estado'=>'success',
                'mensaje'=>'Pago acreditado.',
              ]);
        }else{
            return response()->json([
                'estado'=>'error',
                'mensaje'=>'No existe esa referencia.',
              ]);
        }
    }
    public function rechazarPagoVentanilla($id){

        $ticket=Ticket::where('referencia',$id)->with('renglonTicket.renProducto')->with('estadoCompra')->with('renglonTicket.renEstados')->first();
        if ($ticket!=null) {
            $ticket->estado_id=2;
            $ticket->save();
            return response()->json([
                'estado'=>'success',
                'mensaje'=>'Pago rechazado.',
              ]);
        }else{
            return response()->json([
                'estado'=>'error',
                'mensaje'=>'No existe esa referencia.',
              ]);
        }
    }
    public function consultarReferenciaVentanilla($id){

        $ticket=Ticket::where('referencia',$id)->with('renglonTicket.renProducto')->with('estadoCompra')->with('renglonTicket.renEstados')->first();
        if ($ticket!=null) {
            if ($ticket->estado_id!=1&&$ticket->estado_id!=3) {
                return response()->json($ticket);
            }else {
                return response()->json([
                    'estado'=>'error',
                    'mensaje'=>'Ya se a subido un comprobante.',
                  ]);
            }
        }else{
            return response()->json([
                'estado'=>'error',
                'mensaje'=>'No existe esa referencia.',
              ]);
        }
    }
    public function validarCliente(Request $request){
        if (isset($_COOKIE['cliente'])) {
            return response()->json(['estado'=>'success']);
        }
        return response()->json(['estado'=>'error']);
    }

 
    public function generate_string() {
        //$input='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $input='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';//generar solo mayusculas

        $strength = 4;
        $input_length = strlen($input);
        $random_string = '';
        for($i = 0; $i < $strength; $i++) {
            $random_character = $input[mt_rand(0, $input_length - 1)];
            $random_string .= $random_character;
        }
 
        return $random_string;
    }
 
    public function completarValor($valor) {
        $num=strlen($valor);
        for($i = $num; $i < 4; $i++) {
            $valor="0".$valor;
        }
 
        return $valor;
    }

}
