<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Yajra\DataTables\DataTables;
use App\Models\FuncionarioCliente;
use App\Models\Conversa;
use App\Models\Cliente;
use App\Models\DepCliente;
use App\Models\Solicitacao;

use App\Models\MensagensChat;
use App\Models\Mensagem;
use App\Models\User;
use Illuminate\Support\Facades\Event;
use DateTime;
use App\Events\EnviarMensagemCliente;
use App\Events\CriarTalk;
use App\Models\Sector;
use App\Models\Funcionario;
use App\Models\Participante;
use App\Events\ExibirAssuntoCliFun;
use App\Events\SendMessageGestDoc;

use Illuminate\Support\Str;
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\File;




class PersonalSolitacaoController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
      //Início cliente info solicitacão
     public function index()
    {   
        $dados=$this->trazerPedidos("virtual");
        return view('usuarios.clientes.solicitacao.documentacao.virtual.pedidos_virtual',['dados'=>$dados]);
    }
    
    public function solicitacaoVirtual()
    {   
        $dados=$this->trazerPedidos("virtual");
        return view('usuarios.clientes.solicitacao.documentacao.virtual.pedidos_virtual',['dados'=>$dados]);
    }
    public function solicitacaoFisica()
    {
        $dados=$this->trazerPedidos("fisica");
        return view('usuarios.clientes.solicitacao.documentacao.fisica.pedidos_fisica',['dados'=>$dados]);
    } 
    
    
    
    
    //Solitacoes dos clientes que ja foram tratadas
     public function solicitacaoVirtualFinish()
    {   
        $dados=$this->trazerPedidosFinish("virtual");
        return view('usuarios.clientes.solicitacao.documentacao.virtual.concluido_virtual',['dados'=>$dados]);
    }
    public function solicitacaoFisicaFinish()
    {
        $dados=$this->trazerPedidosFinish("fisica");
        return view('usuarios.clientes.solicitacao.documentacao.fisica.concluido_fisico',['dados'=>$dados]);
    } 
    //
    //end cliente info solicitacão
    /**
     * 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)
    {
        //
    }

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



    public function trazerPedidos($natureza)
    {
        $idEmpresa=FuncionarioCliente::trazer_Empresa_id();
        if($idEmpresa==null || empty($idEmpresa))
            return $dados=['semdados'=>0];
        
            $dados=Solicitacao::join('users','users.id','solicitacaos.user_id')
                        ->join('pessoas','pessoas.id','users.pessoa_id')
                        ->join('funcionarioclientes','funcionarioclientes.user_id','users.id')
                        ->join('categoriaclientes','categoriaclientes.id','funcionarioclientes.categoria_id')
                        ->where('solicitacaos.naturezasolicitacao',$natureza)
                        ->where('funcionarioclientes.cliente_id',$idEmpresa->id)
                        ->where('solicitacaos.estadosolicitacao',"recebido")
                        ->orWhere('solicitacaos.estadosolicitacao',"andamento")
                        ->orderBy('solicitacaos.id','desc')
                        ->select('solicitacaos.*','funcionarioclientes.cliente_id','pessoas.nome','categoriaclientes.categoriacliente')->get();
            return $dados;
   
        

      
    }
         public function trazerPedidosFinish($natureza)
    {
        $idEmpresa=FuncionarioCliente::trazer_Empresa_id();
        if($idEmpresa==null || empty($idEmpresa))
            return $dados=['semdados'=>0];
        
             $dados=\App\Models\Auto::join('solicitacaos','solicitacaos.id','autos.solicitacao_id')
                                ->join('users','users.id','solicitacaos.user_id')
                                ->join('pessoas','pessoas.id','users.pessoa_id')
                                ->join('funcionarioclientes','funcionarioclientes.user_id','users.id')
                                ->join('categoriaclientes','categoriaclientes.id','funcionarioclientes.categoria_id')
                                ->where('solicitacaos.naturezasolicitacao',$natureza)
                                ->where('funcionarioclientes.cliente_id',$idEmpresa->id)
                                ->select('autos.*','solicitacaos.assuntosolicitacao','solicitacaos.agenciasolicitacao','solicitacaos.tipodocumentosolicitacao',
                                    'funcionarioclientes.cliente_id','pessoas.nome','categoriaclientes.categoriacliente')->get();
            return $dados;
   
        

      
    }

    public function solicitacaoDestruicao()
    {
        return  view('usuarios.clientes.solicitacao.destruicao.destruicao');
        
    }
    public function open_solicitacaoDestruicao()
    {
        $idEmpresa=FuncionarioCliente::trazer_Empresa_id();
        if($idEmpresa==null || empty($idEmpresa))
            return $dados=['semdados'=>0];
        
            $dados=Solicitacao::join('users','users.id','solicitacaos.user_id')
                        ->join('pessoas','pessoas.id','users.pessoa_id')
                        ->join('funcionarioclientes','funcionarioclientes.user_id','users.id')
                        ->join('categoriaclientes','categoriaclientes.id','funcionarioclientes.categoria_id')
                        ->where('tiposolicitacao',"destruicao")
                        ->where('funcionarioclientes.cliente_id',$idEmpresa->id)
                        ->where('solicitacaos.estadosolicitacao',"recebido")
                        ->orWhere('solicitacaos.estadosolicitacao',"andamento")
                        ->orderBy('solicitacaos.id','desc')
                        ->select('solicitacaos.*','funcionarioclientes.cliente_id','pessoas.nome','categoriaclientes.categoriacliente')->get();
         
   
        
        return  view('usuarios.clientes.solicitacao.destruicao.destruicao_index',['dados'=>$dados]);
    }
    
      //Personalizar Documentos 
      public function solicitacaoPersonalizado($personal)
      {
         $personal=$personal;     
         return view('usuarios.clientes.solicitacao.pedidopersonalizado.pedidopersonalizado',['personal'=>$personal]);
                     
      }

    
    //index do consulta e pedidos dod sclientes
    public function abirPesquisaDocCliente()
    {
        return view('usuarios.clientes.consulta.doc_digitalizados.docdigitalizados');
    }
   
    
    
      //salvar Peosnalizar pedodos dos cliente
        public function criarSolictacaoPersonalizada(Request $request)
        {
             if(!empty($request->tiposolictacao) && !empty($request->password))
                if($request->tiposolictacao==="recolha"){
                    
                       $pass=$request->password;
                        $actual=Auth::user();
                        if(Hash::check($pass, $actual->password))
                        {
                            
                            //$originatario,$tipo_DeSolictacao,$naturezasolcitacao
                            $this->socilitarRecolha($request,"cliente","recolha","fisica");
                            $criarSolictacaoPersonalizada['success']="fisico";
                            $criarSolictacaoPersonalizada['message']=" Solicitação de Recolha feita com sucesso";
                            return json_encode($criarSolictacaoPersonalizada);
                        }
                        
                        $criarSolictacaoPersonalizada['success']="senhaerror";
                        $criarSolictacaoPersonalizada['message']=" senha incorrecta, Impossivel efectura esta operação";
                        return json_encode($criarSolictacaoPersonalizada);
                    
                }   
        
            
                        $conversa=new Conversa();
                        $conversa->estado="aberta";
                        $conversa->originatario="cliente";
                        $conversa->prioridade=$request->urgencia;
                        $conversa->tema=$request->assunto;
                        $conversa->tipopedido=$request->naturezasolcitacao;
                        $conversa->user_id=Auth::id();
                        $conversa->save();
                        $idconversa=$conversa->id;
                
                        $minhaconversa2=$request->assunto.". ".$request->nota;
                        $num_Socltaco=DB::table('solicitacaos')->select('numerosocilitacao')->max('numerosocilitacao');
                        
                            if(empty($num_Socltaco) || $num_Socltaco==0)
                                $num_Socltaco=0;
            
                        $solcitacaoPedidos=new Solicitacao();
                        $solcitacaoPedidos->numerosocilitacao=$num_Socltaco+1;
                        $solcitacaoPedidos->assuntosolicitacao=filter_var($request->assunto,FILTER_SANITIZE_STRIPPED);
                        $solcitacaoPedidos->prioridadesolicitacao=$request->urgencia;
                        $solcitacaoPedidos->tipodocumentosolicitacao=$request->tipodocumento;
                        $solcitacaoPedidos->agenciasolicitacao=$request->agencia;
                        $solcitacaoPedidos->naturezasolicitacao=$request->naturezasolcitacao;
                        $solcitacaoPedidos->provenienciasolitacao="externa";
                        $solcitacaoPedidos->conversa_id=$idconversa;
                        $solcitacaoPedidos->detalhessolicitacao=$request->nota;
                        $solcitacaoPedidos->user_id=Auth::id();
                        $solcitacaoPedidos->save();
            
                    //Enviar mensagem Noa Conversa
                        $msgChat=new MensagensChat();
                            $msgChat=new MensagensChat();
                            $msgChat->mensagem=filter_var($minhaconversa2,FILTER_SANITIZE_STRIPPED);
                            $msgChat->user_from=Auth::user()->id;
                            $msgChat->user_to=1;
                            $msgChat->estadomensagem="naolido";
                            $msgChat->save();
                            $idChatMsg=$msgChat->id;
            
                    //Cruzar dados das conversa e Mensanges chat
                        $mensagem=new Mensagem();
                            $mensagem->conversa_id=$idconversa;
                            $mensagem->chat_id=$idChatMsg;
                            $mensagem->save();
            
            
                            $converasControl=new ConversaController();
                            //______________Web Sockets____________
                            $idconversa=intval($idconversa);
                            $rementente=Auth::id();
                            $rementente=intval($rementente);
                            //adicionar Gestores na conevrsa
                            $converasControl->participantes($idconversa);
            
                            //event (new ExibirAssuntoCliFun($idconversa) );
            
                            if($request->naturezasolcitacao==="virtual")
                            $criarSolictacaoPersonalizada['success']="virtual";
                                else $criarSolictacaoPersonalizada['success']="fisico";
                            
                            $criarSolictacaoPersonalizada['message']="Solicitação feita com sucesso";
                            return json_encode($criarSolictacaoPersonalizada);
    }
        

    
         private function socilitarRecolha(Request $request,$originatario,$tipo_DeSolictacao,$naturezasolcitacao)
        {   
                //criar Grupo
                $funcionarios=[];
                array_push($funcionarios,Auth::id());
                
                //TRazer tdod Funcioanrio do serv-externo do nivel 2 e 1
                   $funcionari_nivel=\App\Models\Funcionario::join('categorias','categorias.id','funcionarios.categoria_id')
                                                            ->join('sectores','sectores.id','funcionarios.sector_id')
                                                            ->join('users','users.id','funcionarios.user_id')
                                                            ->where('sectores.sector',"Serviços Externos")
                                                            ->orWhere('sectores.sector',"Pedidos e Consultas")
                                                            ->where('categorias.categoria',"Técnico Nível1")
                                                            ->orWhere('categorias.categoria',"Técnico Nível2")
                                                            ->select('users.id','users.name','categorias.categoria','funcionarios.sector_id')
                                                            ->distinct()->get();
                
                //adiconar Particpnates no S:E e PD tecnicos 1 e 2 para conversa                        
                  foreach($funcionari_nivel as $funcio)
                  {
                      array_push($funcionarios,$funcio->id); 
                  }
                  //adicoanr Gestor como Particonate
                  $user_admin_gest=\App\Models\Funcionario::join('categorias','categorias.id','funcionarios.categoria_id')
                                                          ->join('users','users.id','funcionarios.user_id')
                                                          ->where('categorias.categoria',"Gestor")
                                                          ->select('users.id')->first();
                        array_push($funcionarios,$user_admin_gest->id);

                $empres_conversa=\App\Models\FuncionarioCliente::trazer_Empresa_Nome();

                $conversa=new Conversa();
                $conversa->estado="aberta";
                $conversa->originatario=$originatario;
                $conversa->prioridade=$request->urgencia;
                $conversa->tema=$request->assunto." ".$empres_conversa->nome;
                $conversa->tipopedido=$naturezasolcitacao;
                $conversa->user_id=Auth::id();
                $conversa->conversatipo="grupo";
                $conversa->save();
                $idconversa=$conversa->id;
        
                $minhaconversa2=$request->assunto.". ".$request->nota;
                $num_Socltaco=DB::table('solicitacaos')->select('numerosocilitacao')->max('numerosocilitacao');
                
                    if(empty($num_Socltaco) || $num_Socltaco==0)
                        $num_Socltaco=0;

                $solcitacaoPedidos=new Solicitacao();
                $solcitacaoPedidos->numerosocilitacao=$num_Socltaco+1;
                $solcitacaoPedidos->assuntosolicitacao=filter_var($request->assunto,FILTER_SANITIZE_STRIPPED);
                $solcitacaoPedidos->prioridadesolicitacao=$request->urgencia;
                $solcitacaoPedidos->tipodocumentosolicitacao=$request->tipodocumento;
                $solcitacaoPedidos->agenciasolicitacao=$request->agencia;
                $solcitacaoPedidos->datarecolha=$request->datarecolha;
                $solcitacaoPedidos->naturezasolicitacao=$naturezasolcitacao;
                $solcitacaoPedidos->conversa_id=$idconversa;
                $solcitacaoPedidos->tiposolicitacao=$tipo_DeSolictacao;
                $solcitacaoPedidos->detalhessolicitacao=$request->nota;
                $solcitacaoPedidos->user_id=Auth::id();
                $solcitacaoPedidos->save();

            //Enviar mensagem Noa Conversa
                $msgChat=new MensagensChat();
                    $msgChat=new MensagensChat();
                    $msgChat->mensagem=filter_var($minhaconversa2,FILTER_SANITIZE_STRIPPED);
                    $msgChat->user_from=Auth::user()->id;
                    $msgChat->user_to=1;
                    $msgChat->estadomensagem="naolido";
                    $msgChat->save();
                    $idChatMsg=$msgChat->id;

            //Cruzar dados das conversa e Mensanges chat
                $mensagem=new Mensagem();
                    $mensagem->conversa_id=$idconversa;
                    $mensagem->chat_id=$idChatMsg;
                    $mensagem->save();

                    //______________Web Sockets____________
                    $idconversa=intval($idconversa);
                    $rementente=Auth::id();
                    $rementente=intval($rementente);
                    //adicionar Gestores na conevrsa
                    $this->adicionarParticpantes($idconversa,$funcionarios);

                    //event (new ExibirAssuntoCliFun($idconversa) );

        }
            
            
            
        
        public function doSocilitarDestruicao(Request $request)
        {       
            //dd($request->all());
      
                        if(empty($request->agencia))
                        {
                            $mueVector[]=array("verificador"=>false,"mensagem"=>"o campo Agencia deve estar preenchido");
                
                                    echo  json_encode($mueVector);
                                    return;
                        }else
                            if( (empty($request->file('comprovativo'))) )
                            {
                                 $mueVector[]=array("verificador"=>false,"mensagem"=>"Adiciona o comprovativo Digital da solicitação");
                                  echo  json_encode($mueVector);
                                  return;
                            }
                    
                    
                
                        $senha=\App\Models\User::find(Auth::id())->first();
                        //dd(Hash::check($request->senha, $senha->password));
                        if (!(Hash::check($request->senha, $senha->password)) )
                        {
                                  $mueVector[]=array("verificador"=>false,"mensagem"=>"senha inválida, não tens permissão para efectuar esta operação");
                                  echo  json_encode($mueVector);
                                  return;
                        }
                    
                    
                $funcionarios=[];
                array_push($funcionarios,Auth::id());
                //TRazer tdod Funcioanrio do serv-externo do nivel 2 e 1
                   $funcionari_nivel=\App\Models\Funcionario::join('categorias','categorias.id','funcionarios.categoria_id')
                                                            ->join('sectores','sectores.id','funcionarios.sector_id')
                                                            ->join('users','users.id','funcionarios.user_id')
                                                            ->where('sectores.sector',"Serviços Externos")
                                                            ->orWhere('sectores.sector',"Pedidos e Consultas")
                                                            ->where('categorias.categoria',"Técnico Nível1")
                                                            ->select('users.id','users.name','categorias.categoria','funcionarios.sector_id')
                                                            ->distinct()->get();
                
                //adiconar Particpnates no S:E e PD tecnicos 1 e 2 para conversa                        
                  foreach($funcionari_nivel as $funcio)
                  {
                      array_push($funcionarios,$funcio->id); 
                  }
                  //adicoanr Gestor como Particonate
                  $user_admin_gest=\App\Models\Funcionario::join('categorias','categorias.id','funcionarios.categoria_id')
                                                          ->join('users','users.id','funcionarios.user_id')
                                                          ->where('categorias.categoria',"Gestor")
                                                          ->select('users.id')->first();
                        array_push($funcionarios,$user_admin_gest->id);

                $empres_conversa=\App\Models\FuncionarioCliente::trazer_Empresa_Nome();

                $conversa=new Conversa();
                $conversa->estado="aberta";
                $conversa->originatario="cliente";
                $conversa->prioridade=$request->urgencia;
                $conversa->tema="destruição ".$request->tipodocumentosolicitacao." ".$empres_conversa->nome;
                $conversa->tipopedido=$request->naturezasolicitacao;
                $conversa->user_id=Auth::id();
                $conversa->conversatipo="grupo";
                $conversa->save();
                $idconversa=$conversa->id;
        
                $minhaconversa2=$request->assunto.". ".$request->nota;
                $num_Socltaco=DB::table('solicitacaos')->select('numerosocilitacao')->max('numerosocilitacao');
                
                    if(empty($num_Socltaco) || $num_Socltaco==0)
                        $num_Socltaco=0;
                
                $saveImage_url = storage::putFile('clientes/solicitacao/destruicao_comprovativos/'.$empres_conversa->nome.'/'.$request->agencia,$request->file('comprovativo'));
                $meu_assunto="destruição da ".$request->tipodocumentosolicitacao;
                $solcitacaoPedidos=new Solicitacao();
                $solcitacaoPedidos->numerosocilitacao=$num_Socltaco+1;
                $solcitacaoPedidos->assuntosolicitacao=filter_var($meu_assunto,FILTER_SANITIZE_STRIPPED);
                $solcitacaoPedidos->prioridadesolicitacao=$request->urgencia;
                $solcitacaoPedidos->tipodocumentosolicitacao=$request->tipodocumentosolicitacao;
                $solcitacaoPedidos->agenciasolicitacao=$request->agencia;
                $solcitacaoPedidos->datarecolha=$request->datarecolha;
                $solcitacaoPedidos->naturezasolicitacao=$request->naturezasolicitacao;
                $solcitacaoPedidos->conversa_id=$idconversa;
                $solcitacaoPedidos->comprovativo=$saveImage_url;
                $solcitacaoPedidos->tiposolicitacao="destruicao";
                $solcitacaoPedidos->detalhessolicitacao=$request->nota;
                $solcitacaoPedidos->user_id=Auth::id();
                $solcitacaoPedidos->save();
                    
                    
                    
            //Enviar mensagem Noa Conversa
            $minhaconversa2=$meu_assunto;
                $msgChat=new MensagensChat();
                    $msgChat=new MensagensChat();
                    $msgChat->mensagem=filter_var($minhaconversa2,FILTER_SANITIZE_STRIPPED);
                    $msgChat->user_from=Auth::user()->id;
                    $msgChat->user_to=1;
                    $msgChat->estadomensagem="naolido";
                    $msgChat->save();
                    $idChatMsg=$msgChat->id;

            //Cruzar dados das conversa e Mensanges chat
                $mensagem=new Mensagem();
                    $mensagem->conversa_id=$idconversa;
                    $mensagem->chat_id=$idChatMsg;
                    $mensagem->save();

                    //______________Web Sockets____________
                    $idconversa=intval($idconversa);
                    $rementente=Auth::id();
                    $rementente=intval($rementente);
                    //adicionar Gestores na conevrsa
                    $this->adicionarParticpantes($idconversa,$funcionarios);

                    //event (new ExibirAssuntoCliFun($idconversa) );
                    
                      
                            $mueVector[]=array(
                                "verificador"=>"true",
                            );
                
                        echo  json_encode($mueVector);
                        return;
                        
            
        }

        
        
        private function adicionarParticpantes($conversa,$funcionario_user_id)
        {
            for($i=0;$i<=count($funcionario_user_id)-1;$i++)
            {
             
            Participante::create([
                        'conversa_id'=>$conversa,
                        'user_id'=>$funcionario_user_id[$i],
                    ]);
            }
        }
        
        
    
}