<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use \App\Http\Controllers\SolicitacaoDocumentos;
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Support\Facades\Crypt;
use App\Models\Conversa;
use App\Models\Cliente;
use App\Models\DepCliente;
use App\Models\Solicitacao;

use App\Http\Controllers\SolicitacaoController;

use App\Models\MensagensChat;
use App\Models\Mensagem;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Hash;
use DateTime;
use Illuminate\Support\Facades\DB;
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;

class PedidosConsultaController extends Controller
{
    
   
    public function dashboard()
    {
        return view('usuarios.funcionarios.pedidosConsultas.dashboard.index');
    }


    public function indexVirtual()
    {
        // $dados=new SolicitacaoDocumentos();
        $dados=$this->trazerClasseSolicitacoesVirtual();
        return view('usuarios.funcionarios.pedidosConsultas.pedidos.virtuais.recebidos',['dados'=>$dados]);
    }


  //__________INformaçõe___________Infomaçoes_________so  li  ci  tac    oes__________
    public function verinfoGestdocSolicitacao_virtaul(Request $request)
    {
         $meu_id_decrypted="0";
            $meuid=$request->solicitacao_id;
            try {
                $meu_id_decrypted = Crypt::decryptString($meuid);
            } catch (DecryptException $e) {
                return back();
            }
            $solcitacao_clas=new SolicitacaoController();
            $dados=$solcitacao_clas->trazerAutoSelecinado($meu_id_decrypted);
            
        return view('usuarios.funcionarios.pedidosConsultas.pedidos.virtuais.verrecebidos',['dados'=>$dados]);
    }
    
     public function verinfoGestdocSolicitacao_fisica(Request $request)
    {
         $meu_id_decrypted="0";
            $meuid=$request->solicitacao_id;
            try {
                $meu_id_decrypted = Crypt::decryptString($meuid);
            } catch (DecryptException $e) {
                return back();
            }
            $solcitacao_clas=new SolicitacaoController();
            $dados=$solcitacao_clas->trazerAutoSelecinado($meu_id_decrypted);
            
        return view('usuarios.funcionarios.pedidosConsultas.pedidos.fisicos.info_recolha',['dados'=>$dados]);
    }
    
    public function verinfoGestdocSolicitacao_Concluida_virtual(Request $request)
    {
         $meu_id_decrypted="0";
            $meuid=$request->solicitacao_id;
            try {
                $meu_id_decrypted = Crypt::decryptString($meuid);
            } catch (DecryptException $e) {
                return back();
            }
            $solcitacao_clas=new SolicitacaoController();
            $dados=$solcitacao_clas->trazerAutoSelecinado($meu_id_decrypted);
            
        return view('usuarios.funcionarios.pedidosConsultas.pedidos.virtuais.verrecebidos',['dados'=>$dados]);
    }
    
 //__________E   N  D   I  formaçõe___________Infomaçoes_________E  N  D _________

    //crar auto  
    public function criarAutos(Request $request)
    {
        $meu_id_decrypted="0";
            $meuid=$request->solicitacao_id;
            try {
                $meu_id_decrypted = Crypt::decryptString($meuid);
            } catch (DecryptException $e) {
                return back();
            }
            if($conversa=Conversa::find($meu_id_decrypted))
            {
                $dados=$this->trazerAutoSelecinado($meu_id_decrypted);
                $departamento=DepCliente::where('cliente_id',$dados->cliente)->first();
                return view('usuarios.funcionarios.pedidosConsultas.pedidos.virtuais.create_auto',['dados'=>$dados,
                                                                                    'departamento'=>$departamento]);
            }   
        return back();
    }

    public function trazerAutoSelecinado($id)
    {
        $dados=Cliente::join('funcionarioclientes', 'funcionarioclientes.cliente_id','=','clientes.id')
        ->join('users','users.id','=','funcionarioclientes.user_id')
        ->join('pessoas','pessoas.id','=','users.pessoa_id')
        ->join('categorias','categorias.id','=','funcionarioclientes.categoria_id')
        ->join('conversas','conversas.user_id','=','users.id')
        ->join('mensagens','mensagens.conversa_id','=','conversas.id')
        ->where('conversas.id',$id)
        ->select('pessoas.nome','categorias.categoria','conversas.tema','users.email',
                  'conversas.created_at','funcionarioclientes.cliente_id','conversas.id')->distinct()->first();
            
          return $dados; 

    }




        //_________FISCOS
        public function criarAutosFisico(Request $request)
        {
            $meu_id_decrypted="0";
                $meuid=$request->solicitacao_id;
                try {
                    $meu_id_decrypted = Crypt::decryptString($meuid);
                } catch (DecryptException $e) {
                    return back();
                }
                if($conversa=Conversa::find($meu_id_decrypted))
                {
                    $dados=$this->trazerAutoSelecinado($meu_id_decrypted);
                    $departamento=DepCliente::where('cliente_id',$dados->cliente)->first();
                    return view('usuarios.funcionarios.pedidosConsultas.pedidos.fisicos.create_autofisico',['dados'=>$dados,
                                                                                        'departamento'=>$departamento]);
                }   
            return back();
        }
        

        //apartir da classe solicitacao__Virtual
        public function trazerClasseSolicitacoesVirtual()
        {
           $dados= Solicitacao::join('users','users.id','solicitacaos.users_id')->get();               
           return $dados;
        }

        //salvar Peosnalizar pedodos dos cliente
        public function criarSolictacaoPersonalizada(Request $request)
        {
        

            $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->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);
    }
        


}
