<?php

namespace App\Http\Controllers;

use App\Models\Caixa;
use App\Models\Reserva;
use App\Models\Fileira;
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\ArrumarCaixa;

class CaixaController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {   
        $checkin=$this->buscarReservasCheckin();
        return view('usuarios.funcionarios.secArmazem.configArmazem.reservas.listar_checkin',['checkin'=>$checkin]);
        
    }
    public function mostrarArrumarCaixa($idreserva)
    {    $andar=$this->trazerArmazemAndar($idreserva);
        $dados=$this->trazerTodasCaixasDeUmaReserva($idreserva);
        return view('usuarios.funcionarios.secArmazem.configArmazem.arrumar_caixas.arrumar',['dados'=>$dados,'andar'=>$andar]);
        
    }

    public function mostrarArrumarCaixa2($idreserva)
    {    $andar=$this->trazerArmazemAndar($idreserva);
        $dados=$this->trazerTodasCaixasDeUmaReserva($idreserva);
        return view('usuarios.funcionarios.secArmazem.configArmazem.arrumar_caixas.arrumar2',['dados'=>$dados,'andar'=>$andar]);
        
    }
    public function  pegaElemento(Request $request){
 
            if($request->posicao==="vazio..."){
            return 1;}
      $caixas=ArrumarCaixa::where('caixa_id',$request->id)->select('id')->get();
            if(!$caixas->isEmpty()){
                //return "esta caixa ja foi adcionada na Fileira";
                return 2;
            }
            $caixas2=ArrumarCaixa::where('fileira_id',$request->posicao)->select('id')->get();
                if(!$caixas->isEmpty()){
                    //return "Nesta Posição ja  existe caixa Adicionada";
                    return 3; 
                }
               if($request->posicao<1){
                   return 1;
               }

                $arrumarCaixa=new ArrumarCaixa();
                $arrumarCaixa->fileira_id=$request->posicao;
                $arrumarCaixa->caixa_id=$request->id;
                $sucesso=$arrumarCaixa->save();
                if($sucesso){
                    if($caixasUpdate=Caixa::find($request->id)){
                        $caixasUpdate->estadocaixas="adicionado";
                        $caixasUpdate->save();
                    }


                    $dados=$this->trazerTodasCaixasapoisAdicionada($request->id);
                        foreach($dados as $dado){
                            echo "
                            <tr>
                                <td>".$dado->nomearmazen."</td>
                                <td>".$dado->nomecliente."</td>
                                <td>".$dado->numerocliente."</td>
                                <td>".$dado->numerodacaixa."</td>
                                <td>".$dado->andar."</td>
                                <td>".$dado->numerocorredor."</td>
                                <td>".$dado->numeromodulo."</td>
                                <td>".$dado->numeroprateleira."</td>
                                <td>".$dado->numerofileira."</td>
                                <td>".$dado->posicaofileira."</td>
                                </tr>
                                ";
                        }
                     return;
                    } 
                return;
        
    }

    public function mostrarClienteArmazem(){    
        $clientes=$this->buscarCaixasArmazemCheckin();
        return view('usuarios.funcionarios.secArmazem.configArmazem.arrumar_caixas.escolher_armazen',['clientes'=>$clientes]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        
        
    }
    public function listarCaixasClientesAdicionadasForm()
    {   
        $dados=$this->trazerTodasCaixasapoisAdicionada2();
        return view('usuarios.funcionarios.secArmazem.configArmazem.arrumar_caixas.listar_caixasarrumadas',['dados'=>$dados]);
        
    }

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

    }

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

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Caixa  $caixa
     * @return \Illuminate\Http\Response
     */
    public function edit(Caixa $caixa)
    {
        //
    }

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

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Caixa  $caixa
     * @return \Illuminate\Http\Response
     */
    public function destroy(Caixa $caixa)
    {
        //
    }

    private function buscarReservasCheckin(){
        $dados=DB::table('caixas')
                ->join('reservas','reservas.id','=','caixas.reserva_id')
                ->join('clientes','clientes.id','=','reservas.cliente_id')
                ->join('confcaixas','confcaixas.id','=','reservas.Confcaixa_id')
                ->where('reservas.estadoreserva',"Check_In")
                ->orderby('reservas.created_at', 'desc')
                ->select('reservas.*','clientes.numerocliente','clientes.nomecliente',
                    'confcaixas.tipocaixa','caixas.numerodacaixa')->distinct()->get();
        return $dados;
    }

    private function buscarCaixasArmazemCheckin(){
        $dados=DB::table('reservas')
                ->join('clientes','clientes.id','=','reservas.cliente_id')
                ->join('armazens','armazens.id','=','reservas.armazen_id')
                ->where('reservas.estadoreserva',"Check_In")
                ->where('armazens.estado',"activo")
                ->orderby('reservas.created_at', 'desc')
                ->select('reservas.*','clientes.numerocliente','clientes.nomecliente',
                         'armazens.nomearmazen')->get();
         return $dados;
    
    }

    private function trazerTodasCaixasDeUmaReserva($id){    
        
        $dados=DB::table('reservas')
            ->join('clientes','clientes.id','=','reservas.cliente_id')
            ->join('armazens','armazens.id','=','reservas.armazen_id')
            ->join('caixas','caixas.reserva_id','=','reservas.id')
            ->join('confcaixas','confcaixas.id','=','reservas.confcaixa_id')
            ->where('reservas.estadoreserva',"Check_In")
            ->where('armazens.estado',"activo")
            ->where('caixas.estadocaixas',"reservada")
            ->where('reservas.id',$id)
            ->orderby('reservas.created_at', 'desc')
            ->select('reservas.referencia','clientes.numerocliente','confcaixas.alturacaixa','confcaixas.larguracaixa',
                     'clientes.nomecliente','armazens.nomearmazen','caixas.numerodacaixa','caixas.id')->get();
      return $dados;

    }

    private function trazerArmazemAndar($id){    
        
        $dados=DB::table('reservas')
            ->join('armazens','armazens.id','=','reservas.armazen_id')
            ->join('corredores','corredores.armazem_id','=','armazens.id')
            ->join('andares','andares.id','=','corredores.andar_id')
            ->where('armazens.estado',"activo")
            ->where('reservas.id',$id)
            ->select('andares.id','andares.andar')->get();

      return $dados;

    }

 private function trazerTodasCaixasapoisAdicionada($id){    
        
        $dados=DB::table('reservas')
            ->join('clientes','clientes.id','=','reservas.cliente_id')
            ->join('armazens','armazens.id','=','reservas.armazen_id')
            ->join('caixas','caixas.reserva_id','=','reservas.id')
            ->join('confcaixas','confcaixas.id','=','reservas.confcaixa_id')          
            ->join('corredores','corredores.armazem_id','=','armazens.id')
            ->join('andares','andares.id','=','corredores.andar_id')
            ->join('ladocorredores','ladocorredores.corredor_id','=','corredores.id')
            ->join('modulos','modulos.lado_id','=','ladocorredores.id')
            ->join('prateleiras','prateleiras.modulo_id','=','modulos.id')
            ->join('fileiras','fileiras.prateleira_id','=','prateleiras.id')
            ->where('reservas.estadoreserva',"Check_In")
            ->where('armazens.estado',"activo")
            ->where('caixas.id',$id)
            ->orderby('caixas.created_at', 'desc')
            ->select('reservas.referencia','clientes.numerocliente','modulos.numeromodulo','prateleiras.numeroprateleira',
            'modulos.alturamodulo','confcaixas.alturacaixa','confcaixas.larguracaixa','caixas.id','corredores.numerocorredor',
            'fileiras.numerofileira','fileiras.posicaofileira','andares.andar','clientes.nomecliente','armazens.nomearmazen','caixas.numerodacaixa')->get();
      return $dados;

    }
    private function trazerTodasCaixasapoisAdicionada2(){    
        
        $dados=DB::table('reservas')
            ->join('clientes','clientes.id','=','reservas.cliente_id')
            ->join('armazens','armazens.id','=','reservas.armazen_id')
            ->join('caixas','caixas.reserva_id','=','reservas.id')
            ->join('confcaixas','confcaixas.id','=','reservas.confcaixa_id')          
            ->join('corredores','corredores.armazem_id','=','armazens.id')
            ->join('andares','andares.id','=','corredores.andar_id')
            ->join('ladocorredores','ladocorredores.corredor_id','=','corredores.id')
            ->join('modulos','modulos.lado_id','=','ladocorredores.id')
            ->join('prateleiras','prateleiras.modulo_id','=','modulos.id')
            ->join('fileiras','fileiras.prateleira_id','=','prateleiras.id')
            ->where('reservas.estadoreserva',"Check_In")
            ->where('armazens.estado',"activo")
            ->orderby('clientes.nomecliente', 'asc')
            ->select('clientes.*','modulos.*','prateleiras.*','reservas.*','armazens.*','fileiras.*','ladocorredores.*'
                        ,'corredores.*','caixas.*', 'confcaixas.*', 'andares.*')->get();
      return $dados;

    }



}