<?php

namespace App\Http\Controllers\Livewire;

use App\Models\User;
use App\Models\Caixa;
use App\Models\Carrinho;
use App\Models\Cliente;
use App\Models\Eliminacaodecaixa;
use Livewire\Component;
use Illuminate\Support\Facades\Auth;



class LWBoxes extends Component
{
   
    public $numeroInicial=null;
    public $numeroFinal=null;
    public $estado=null;
    public $estados=array('Reservado','Anulado','Entrada','Arrumado','Aberto','Em aviso de eliminação','Eliminado','Destruído','Devolvido','Em trânsito');
    public $numeroUnico=null;
    public $numCaixas=null;
    public $carrinho=null; 
    public $caixasEncontradas=null;
    public $documentosencontrados=null;
    public $clientesenvolvidos=null;
    public $resultados = [];
    public $clienteEscolhido=null;
    public $dataLimit=1000;
    public $resultCarrinho=[];
    
   // public $resultados[]=array();
    
    public function render()
    {
        $carrinho = new Carrinho();
        $carr=$carrinho::join('caixas','carrinhos.caixa_id','=','caixas.id')->select('carrinhos.*')->whereNull('carrinhos.deleted_at')->orderBy('caixas.numerodacaixa','asc')->get();
        $this->resultCarrinho=$carr;
        $this->carrinho=count($carr);
        $this->clientes=Cliente::orderBy('created_at','Asc')->get();
        return view('livewire.larawire-caixas',['results'=>$this->resultados,'resultsCarrinho'=>$this->resultCarrinho,'clientes'=>$this->clientes])
        ->extends('usuarios.funcionarios.master.layout2')
        ->section('conteudo');
    }
    
    public function escolherCliente($clienteId){
        $this->cliente=Cliente::where('id',$clienteId)->select('id')->first();
    }
    public function limparFiltro(){
        $this->numeroInicial=null;
        $this->numeroFinal=null;
        $this->estado=null;
        $this->numeroUnico=null;
        $this->numCaixas=null;
        $this->carrinho=null; 
        $this->caixasEncontradas=null;
        $this->documentosencontrados=null;
        $this->clientesenvolvidos=null;
        $this->resultados = [];
        $this->clienteEscolhido=null;
    }
    public function filtrarCaixas(){
        
        if ($this->numeroUnico>=1){
            
            $cxEncontradasCount=null;
            if($this->clienteEscolhido>=1){
                
                
                
                if ($this->estado>=1){
                    
                    $this->clientesenvolvidos=1;
                    $this->resultados=Caixa::
                    join('reservas','reservas.id','=','caixas.reserva_id')
                    ->join('clientes','clientes.id','=','reservas.cliente_id')
                    ->where('caixas.estado',$this->estados[$this->estado-1])
                    ->where('clientes.id',$this->clienteEscolhido)
                    ->where('caixas.numerodacaixa',$this->numeroUnico)
                    ->select('caixas.*')
                    ->orderby('caixas.numerodacaixa','asc')
                    ->take($this->dataLimit)
                    ->get(); 
                    
                }else{
                    
                    $this->resultados=Caixa::
                    join('reservas','reservas.id','=','caixas.reserva_id')
                    ->join('clientes','clientes.id','=','reservas.cliente_id')
                    ->where('clientes.id',$this->clienteEscolhido)
                    ->where('caixas.numerodacaixa',$this->numeroUnico)
                    ->select('caixas.*')
                    ->orderby('caixas.numerodacaixa','asc')
                    ->take($this->dataLimit)
                    ->get();   
                    
                    $this->clientesenvolvidos=1;
                }
            }elseif($this->estado>=1){
                 
                  
               $this->resultados=Caixa:: 
                where('caixas.numerodacaixa',$this->numeroUnico)
                ->where('caixas.estado',$this->estados[$this->estado-1])
                ->select('caixas.*')
                ->orderby
                ->take($this->dataLimit)
                ->get();   
                
                
            } else{
                
                $this->resultados=Caixa::where('caixas.numerodacaixa',$this->numeroUnico)->select('caixas.*')->orderby('caixas.numerodacaixa','asc')->take($this->dataLimit)->get();   
                
            }
           
            
        }elseif($this->numeroFinal>=1){
            
            if($this->numeroInicial>=1){
                
                if($this->numeroInicial<$this->numeroFinal){
                    
                    if($this->clienteEscolhido>=1){
                        if($this->estado>=1){
                            $this->resultados=Caixa::
                            join('reservas','reservas.id','=','caixas.reserva_id')
                            ->join('clientes','clientes.id','=','reservas.cliente_id')
                            ->where('caixas.numerodacaixa','<=',$this->numeroFinal)
                            ->where('numerodacaixa','>=',$this->numeroInicial)
                            ->where('caixas.estado',$this->estados[$this->estado-1])
                            ->where('clientes.id',$this->clienteEscolhido)
                            ->select('caixas.*')
                            ->orderby('caixas.numerodacaixa','asc')
                            ->take($this->dataLimit)
                            ->get();
                        }else{
                            $this->resultados=Caixa::
                            join('reservas','reservas.id','=','caixas.reserva_id')
                            ->join('clientes','clientes.id','=','reservas.cliente_id')
                            ->where('caixas.numerodacaixa','<=',$this->numeroFinal)
                            ->where('numerodacaixa','>=',$this->numeroInicial)
                            ->where('clientes.id',$this->clienteEscolhido)
                            ->select('caixas.*')
                            ->orderby('caixas.numerodacaixa','asc')
                            ->take($this->dataLimit)
                            ->get();
                        }
                        
                    }
                    elseif($this->estado>=1){
                        
                        $this->resultados=Caixa:: 
                        where('caixas.numerodacaixa','<=',$this->numeroFinal)
                        ->where('numerodacaixa','>=',$this->numeroInicial)
                        ->where('caixas.estado',$this->estados[$this->estado-1])
                        ->select('caixas.*')
                        ->orderby('caixas.numerodacaixa','asc')
                        ->take($this->dataLimit)
                        ->get();   
                    }else{
                        $this->resultados=Caixa::where('numerodacaixa','<=',$this->numeroFinal)->where('numerodacaixa','>=',$this->numeroInicial)->select('caixas.*')->orderby('caixas.numerodacaixa','asc')->take($this->dataLimit)->get();
                    }
                    
                }
            
            }
           
            elseif($this->clienteEscolhido>=1){
                if($this->estado>=1){
                    $this->resultados=Caixa::
                    join('reservas','reservas.id','=','caixas.reserva_id')
                    ->join('clientes','clientes.id','=','reservas.cliente_id')
                    ->where('caixas.numerodacaixa','<=',$this->numeroFinal)
                    ->where('caixas.estado',$this->estados[$this->estado-1])
                    ->where('clientes.id',$this->clienteEscolhido)
                    ->select('caixas.*')
                    ->orderby('caixas.numerodacaixa','asc')
                    ->take($this->dataLimit)
                    ->get();
                }else{
                    $this->resultados=Caixa::
                    join('reservas','reservas.id','=','caixas.reserva_id')
                    ->join('clientes','clientes.id','=','reservas.cliente_id')
                    ->where('caixas.numerodacaixa','<=',$this->numeroFinal)
                    ->where('clientes.id',$this->clienteEscolhido)
                    ->select('caixas.*')
                    ->orderby('caixas.numerodacaixa','asc')
                    ->take($this->dataLimit)
                    ->get();
                }
                
            }
            elseif($this->estado>=1){
                
                $this->resultados=Caixa:: 
                where('caixas.numerodacaixa','<=',$this->numeroFinal)
                ->where('caixas.estado',$this->estados[$this->estado-1])
                ->select('caixas.*')
                ->orderby('caixas.numerodacaixa','asc')
                ->take($this->dataLimit)
                ->get();   
            }else{
                $this->resultados=Caixa::where('numerodacaixa','<=',$this->numeroFinal)->select('caixas.*')->orderby('caixas.numerodacaixa','asc')->take($this->dataLimit)->get();
            }
        }
        elseif($this->numeroInicial>=1){
            
            if($this->clienteEscolhido>=1){
                if($this->estado>=1){
                    $this->resultados=Caixa::
                    join('reservas','reservas.id','=','caixas.reserva_id')
                    ->join('clientes','clientes.id','=','reservas.cliente_id')
                    ->where('caixas.numerodacaixa','>=',$this->numeroInicial)
                    ->where('caixas.estado',$this->estados[$this->estado-1])
                    ->where('clientes.id',$this->clienteEscolhido)
                    ->select('caixas.*')
                    ->orderby('caixas.numerodacaixa','asc')
                    ->take($this->dataLimit)
                    ->get();
                }else{
                    $this->resultados=Caixa::
                    join('reservas','reservas.id','=','caixas.reserva_id')
                    ->join('clientes','clientes.id','=','reservas.cliente_id')
                    ->where('caixas.numerodacaixa','>=',$this->numeroInicial)
                    ->where('clientes.id',$this->clienteEscolhido)
                    ->select('caixas.*')
                    ->orderby('caixas.numerodacaixa','asc')
                    ->take($this->dataLimit)
                    ->get();
                }
            }elseif($this->estado>=1){
                
                $this->resultados=Caixa:: 
                where('caixas.numerodacaixa','>=',$this->numeroInicial)
                ->where('caixas.estado',$this->estados[$this->estado-1])
                ->select('caixas.*')
                ->orderby('caixas.numerodacaixa','asc')
                ->take($this->dataLimit)
                ->get(); 
                
            }else{
                
                $this->resultados=Caixa::where('numerodacaixa','>=',$this->numeroInicial)->select('caixas.*')->orderby('caixas.numerodacaixa','asc')->take($this->dataLimit)->get();
            }
             
                  
            
        }
       
        elseif($this->clienteEscolhido>=1){
            if($this->estado>=1){
                $this->resultados=Caixa::
                join('reservas','reservas.id','=','caixas.reserva_id')
                ->join('clientes','clientes.id','=','reservas.cliente_id')
                ->where('caixas.estado',$this->estados[$this->estado-1])
                ->where('clientes.id',$this->clienteEscolhido)
                ->select('caixas.*')
                ->orderby('caixas.numerodacaixa','asc')
                ->take($this->dataLimit)
                ->get();
            }else{
                $this->resultados=Caixa::
                join('reservas','reservas.id','=','caixas.reserva_id')
                ->join('clientes','clientes.id','=','reservas.cliente_id')
                ->where('clientes.id',$this->clienteEscolhido)
                ->select('caixas.*')
                ->orderby('caixas.numerodacaixa','asc')
                ->take($this->dataLimit)
                ->get();  
            }
            
        }
        elseif($this->estado>=1){
            $this->resultados=Caixa::where('caixas.estado',$this->estados[$this->estado-1])->select('caixas.*')->orderby('caixas.numerodacaixa','asc')->take($this->dataLimit)->get();
        }
        $this->caixasEncontradas=count($this->resultados); 
        
    }
    
    public function addCarrinho($idCaixa){
    
        
        $carrinho = new Carrinho();
        
        $crr=$carrinho::where('caixa_id',$idCaixa)->first();
        
        if(!$crr){
            
            $carrinho->caixa_id=$idCaixa;
            $carrinho->usuario_id=Auth::id(); 
            $carrinho->save();
        }
        
        $carr=$carrinho::whereNull('deleted_at')->get();
        $this->carrinho=count($carr);
        $this->resultCarrinho=$carr;
    }
    public function removeCarrinho(){
         $this->carrinho--;
    }
    
    public function limparCarrinho(){
        $carrinhos = Carrinho::get();
        
        foreach($carrinhos as $carrinho){
            $carrinho->delete();
        }
    }
    
    public function eliminarCaixas(){
        $carrinhos = Carrinho::get(); 
        $eliminacao= new Eliminacaodecaixa();
        
        foreach($carrinhos as $carrinho){
            $caixa = Caixa::where('id',$carrinho->getCaixa->id)->first();
            $caixa->estado='Em aviso de eliminação';
            $caixa->save();
            $eliminacao->create(['caixa_id'=> $carrinho->getCaixa->id,'usuario_solicitou_id'=>Auth::id()]);
            $carrinho->forceDelete();
        }
        $carr=$carrinho::whereNull('deleted_at')->get();
        $this->resultsCarrinho=$carr;
        $this->carrinho=count($carr);
         $this->filtrarCaixas();
    }
    public function transitarCaixas(){
        $carrinhos = Carrinho::get(); 
        $eliminacao= new Eliminacaodecaixa();
        
        foreach($carrinhos as $carrinho){
            $caixa = Caixa::where('id',$carrinho->getCaixa->id)->first();
            $caixa->estado='Em trânsito';
            $caixa->save();
            $eliminacao->create(['caixa_id'=> $carrinho->getCaixa->id,'usuario_solicitou_id'=>Auth::id()]);
            $carrinho->forceDelete();
        }
        $carr=$carrinho::whereNull('deleted_at')->get();
        $this->resultsCarrinho=$carr;
        $this->carrinho=count($carr);
         $this->filtrarCaixas();
    }
    public function definirArrumado(){
        $carrinhos = Carrinho::get(); 
        $eliminacao= new Eliminacaodecaixa();
        
        foreach($carrinhos as $carrinho){
            $caixa = Caixa::where('id',$carrinho->getCaixa->id)->first();
            $caixa->estado='Arrumado';
            $caixa->save();
            $eliminacao->create(['caixa_id'=> $carrinho->getCaixa->id,'usuario_solicitou_id'=>Auth::id()]);
            $carrinho->forceDelete();
        }
        $carr=$carrinho::whereNull('deleted_at')->get();
        $this->resultsCarrinho=$carr;
        $this->carrinho=count($carr);
         $this->filtrarCaixas();
    }
    public function definirReserva(){
        $carrinhos = Carrinho::get(); 
        $eliminacao= new Eliminacaodecaixa();
        
        foreach($carrinhos as $carrinho){
            $caixa = Caixa::where('id',$carrinho->getCaixa->id)->first();
            $caixa->estado='Reservado';
            $caixa->save();
            $eliminacao->create(['caixa_id'=> $carrinho->getCaixa->id,'usuario_solicitou_id'=>Auth::id()]);
            $carrinho->forceDelete();
        }
        $carr=$carrinho::whereNull('deleted_at')->get();
        $this->resultsCarrinho=$carr;
        $this->carrinho=count($carr);
         $this->filtrarCaixas();
    }
    public function definirEntrada(){
        $carrinhos = Carrinho::get(); 
        $eliminacao= new Eliminacaodecaixa();
        
        foreach($carrinhos as $carrinho){
            $caixa = Caixa::where('id',$carrinho->getCaixa->id)->first();
            $caixa->estado='Entrada';
            $caixa->save();
            $eliminacao->create(['caixa_id'=> $carrinho->getCaixa->id,'usuario_solicitou_id'=>Auth::id()]);
            $carrinho->forceDelete();
        }
        $carr=$carrinho::whereNull('deleted_at')->get();
        $this->resultsCarrinho=$carr;
        $this->carrinho=count($carr);
        
        $this->filtrarCaixas();
    }
   
}
