<?php

namespace App\Http\Controllers;

use App\Models\Reserva;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\Cliente;
use App\Models\ConfCaixa;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use App\Models\Caixa;

class ReservaController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {   
        $reservas=$this->buscarReservas();
        return view('usuarios.funcionarios.secArmazem.configArmazem.reservas.listar_reservas',
                    ['reservas'=>$reservas]);
    }
    public function exibirClientes(){
             $clientes=Cliente::select('*')->get();
        return view('usuarios.funcionarios.secArmazem.configArmazem.reservas.listar_clientes',
                    ['clientes'=>$clientes]);
    }
    

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
    
    }
    public function reservar_caixas($id)
    {   
        $referenciaCliente=$this->verificarNumeroResferencia($id);
        $clientes=Cliente::where('id',$id)->select('*')->get();
        $quantcaixasCliente=$this->buscarCaixasQunatCliente($id);
        $tipos_caixa=ConfCaixa::select('*')->get();
        return view('usuarios.funcionarios.secArmazem.configArmazem.reservas.novo',
            ['clientes'=>$clientes,'quantcaixasCliente'=>$quantcaixasCliente,'tipos_caixa'=>$tipos_caixa,
              'referenciaCliente'=>$referenciaCliente]);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {    
        $reservas=Reserva::select('estadoreserva')->where('estadoreserva',"rservado")->get();
        if(!$reservas->isEmpty()){
        $store['success']=false;
        $store['message']='Este funcionario tem uma reserva a espera de checkin';
        return json_encode($store);
        }
        $reserva= new Reserva();
        $reserva->cliente_id=$request->cliente_id;
        $reserva->quantcaixas=$request->quant_caixas;
        $reserva->referencia=$request->referencia;
        $reserva->sequenciacaixas="0";
        $reserva->confcaixa_id=$request->tipo_caixa;
        $reserva->armazen_id=$request->armazen_id;
        $reserva=$reserva->save();
        
        $store['success']=true;
        $store['message']='ok';
        return json_encode($store);
    }
    public function sucessoReserva(){
        return redirect()->route('us.armazem.conf.Gestreservas.reservas.index')->with('sucessoreserva','Resserva feita com sucesso');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Reserva  $reserva
     * @return \Illuminate\Http\Response
     */
    public function show(Reserva $reserva)
    {
        //

    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Reserva  $reserva
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {   $quantcaixasCliente=$this->buscarCaixasQunatCliente($id);
        $reservas=$this->trazerReservaCliente($id);
        return view('usuarios.funcionarios.secArmazem.configArmazem.reservas.editar_reserva',
        ['reservas'=>$reservas,'quantcaixasCliente'=>$quantcaixasCliente,'id'=>$id]);
    }

    private function trazerReservaCliente($id){
        $dados=DB::table('reservas')
                ->join('clientes','clientes.id','=','reservas.cliente_id')
                ->join('Confcaixas','Confcaixas.id','=','reservas.Confcaixa_id')
                ->where('reservas.id',$id)
                ->orderby('reservas.created_at', 'desc')
                ->select('reservas.*','Confcaixas.tipocaixa','clientes.nomecliente')->get();

    return $dados;
    }   

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Reserva  $reserva
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {   
        
        $verifica=Caixa::where('reserva_id',$id)->get();
        if(!$verifica->isEmpty()){
            return redirect()->back('')->with('erorreserva','Erro ao Fazer Chek_In, Esta reserva ja foi cadastrada');
        }
        if($request->quant_caixas<0){

        }else{
            if($reserva=Reserva::find($id)){
                $reserva->estadoreserva="Check_In";
                if($reserva->save())
                {
                    $i;
                    $numero_caixas_adicionadas=$request->quant_caixas;
                    for($i=1;$i<=$numero_caixas_adicionadas;$i++)
                    {
                        Caixa::create([
                                        'numerodacaixa'=>$i,
                                        'reserva_id'=>$id,  
                                        'contadorcaixa'=>$request->quant_caixas,
                                         'estadocaixas'=>'reservada',
                                      ]);
                    }
                    return redirect()->route('us.armazem.conf.Gestcaixas.caixa.index')->with('sucsssoCaixasCheckin','Check In Realizado com Sucesso');
                } 
                return redirect()->back('')->with('erorreserva','Erro ao Fazer Chek_In');
            }
        }

    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Reserva  $reserva
     * @return \Illuminate\Http\Response
     */
    public function destroy($id, Request $request)
    {
       if($reserva=Reserva::find($id)){
        $pass=$request->password;
        $actual=Auth::user();
            if(Hash::check($pass, $actual->password)){
                if($reserva->delete())
                    {
                    return redirect()->route('us.armazem.conf.Gestreservas.reservas.index')->with('sucessoreserva','Eliminado com Sucesso');
                    }
                    }else{
                        return redirect()->back()->with('erorreserva','Senha Incorrecta, não tens Permissão para esta operação');
                    }
        }else{
            return redirect()->back()->with('erorreserva','erro ao eliminar verifique os campos');
            }
    }

    private function buscarCaixasQunatCliente($id){
        $dados=DB::table('caixas')
                ->join('reservas','reservas.id','=','caixas.reserva_id')
                ->join('clientes','clientes.id','=','reservas.cliente_id')
                ->where('clientes.id',$id)
                ->select('clientes.id')->sum('clientes.id');
            
        return $dados;
    }
    private function buscarReservas(){
        $dados=DB::table('reservas')
                ->join('clientes','clientes.id','=','reservas.cliente_id')
                ->join('Confcaixas','Confcaixas.id','=','reservas.Confcaixa_id')
                ->where('reservas.estadoreserva',"reservado")
                ->orderby('reservas.created_at', 'desc')
                ->select('reservas.*','clientes.nomecliente','confcaixas.tipocaixa')->get();
        return $dados;
    }

 
     private function verificarNumeroResferencia($id){
        $dados=Reserva::where('cliente_id',$id)->select('referencia')->get();
        if($dados->isEmpty()){
            return $dados=rand(2000,50000);
        }
        foreach($dados as $dado){
            $dados=$dado->referencia;
        }
        return $dados;
     }


}
