<?php

namespace App\Http\Controllers;

use App\Models\Auto;
use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Hash;
use App\Models\Solicitacao;
use App\Models\Conversa;
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Support\Facades\Crypt;
use DateTime;
use PDF;
use Illuminate\Support\Facades\DB;


class AutoController extends Controller
{
   /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */

     //SI   DE    GEST DOK   PEDIDOS E CONUSLTA E 
    public function index()
    {   
        //notificacao Virtual
        $dados=$this->trazerSolictacoes("virtual");
        return view('usuarios.funcionarios.pedidosConsultas.pedidos.virtuais.recebidos',['dados'=>$dados]);
    }
    public function indexFisico()
    {   
        //notificacao Fisico
        $dados=$this->trazerSolictacoes("fisica");
        return view('usuarios.funcionarios.pedidosConsultas.pedidos.fisicos.recebidos',['dados'=>$dados]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * C  R    I    A  R       A   U   T   O    S       G  E    T   D   O C
     */

  

    public function createvirtual(Request $request)
    {   

        //criar auto virtual 

        $meu_id_decrypted="0";
            $meuid=$request->solicitacao_id;
            try {
                $meu_id_decrypted = Crypt::decryptString($meuid);
            } catch (DecryptException $e) {
                return back();
            }
            if($conversa=Solicitacao::where('id',$meu_id_decrypted)->first())
            {
                $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,'conversa'=>$conversa]);
            }
    }

    public function criarAutosFisicos(Request $request)
    {
        $meu_id_decrypted="0";
        $meuid=$request->solicitacao_id;
        try {
            $meu_id_decrypted = Crypt::decryptString($meuid);
        } catch (DecryptException $e) {
            return back();
        }
             
             if($dados->solicitacaoadoc==="nao addoc")
             {
                 
             }
                else{ $solictado_por=User::find($dados->user_id)->getPessoa;
                        $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]);
                    }
        
        if($conversa=Solicitacao::where('id',$meu_id_decrypted)->first())
        {
            $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,'conversa'=>$conversa]);
        }   
    }

    /**
     * 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  \App\Models\Solicitacao  $solicitacao
     * @return \Illuminate\Http\Response
     */
    public function show(Solicitacao $solicitacao)
    {
        //
    }

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

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

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


//S a l v a r     A u t o      F i s i c o d o s    S e r v i ç o s     e x t e r n o s

//pequisa
    public function ImprimirAutoVisaoGeral_servicoExterno($id)
    {
       $dados=Auto::join('users','users.id','autos.autor_id')
                    ->join('solicitacaos','solicitacaos.id','autos.solicitacao_id')
                    ->where('autos.id',$id)
                    ->where('autos.tipoauto',"Recepção e Custódia")
                    ->Where('solicitacaos.estadosolicitacao',"concluido")
                    ->select('autos.*','solicitacaos.user_id','solicitacaos.naturezasolicitacao',
                            'solicitacaos.assuntosolicitacao',
                            'solicitacaos.conversa_id','solicitacaos.agenciasolicitacao')->first();
       return $dados;
    }

    
    public function autoCustodiaServExt(Request $request)
    {   
            $dados=$this->trazerSolictacoes_AutoServico_Extern("fisica");
            return view('usuarios.funcionarios.srvExterno.solicitacao.autos_e_recebidos.concluidos',['dados'=>$dados]);
    } 
    
    public function imprimir_autoCustodiaServExt(Request $request)
    {   
            $meu_id_decrypted="0";
            $meuid=$request->solicitacao_id;
            try {
                $meu_id_decrypted = Crypt::decryptString($meuid);
            } catch (DecryptException $e) {
                return back();
            }
    
            $dados=$this->ImprimirAutoVisaoGeral_servicoExterno($meu_id_decrypted);
            $virtaul='virtual';
                
                 if($dados->solicitacaoadoc==="nao addoc")
                        $solictado_por=Conversa::find($dados->conversa_id)->getUser->getPessoa;
                    else $solictado_por=User::find($dados->user_id)->getPessoa;
                                                        
            return view('usuarios.funcionarios.srvExterno.solicitacao.autos_e_recebidos.generate_auto',['dados'=>$dados,'virtaul'=>$virtaul,
                                                                                            'solictado_por'=>$solictado_por]);
    } 
    
     //Ver Recepção    e   C u s t o d i a      P D    e    S e r v       E x t e r n o s
    public function showInfoRecepcaoCustodia(Request $request)
    {
        return view('usuarios.funcionarios.srvExterno.solicitacao.autos_e_recebidos.ver');
    }
    
    public function salvarAutoFísicoServiosExtern(Request $request)
    {
        
        $num_Socltaco=DB::table('autos')->select('numeroauto')->max('numeroauto');
            if(empty($num_Socltaco) || $num_Socltaco==0)
                $num_Socltaco=0;

        $autocreate=new Auto();
        $autocreate->nome=$request->tipoAuto_create;
        $autocreate->numeroauto=$num_Socltaco+1;
        $autocreate->naturezaauto="externa";
        $autocreate->detalhesauto=$request->detalhes;
        $autocreate->nota=$request->nota;
        $autocreate->tipoauto=$request->tipoAuto_create;
        $autocreate->localdescarga=$request->form_descarga;
        $autocreate->matriculaveiculo=$request->form_matricula;
        $autocreate->formaexpedicao=$request->form_expedicao;
        $autocreate->solicitacao_id=$request->idsolcitacao;
        $autocreate->entregue_por=$request->funcionario_entregue;
        $autocreate->autor_id=Auth::id();
        $save=$autocreate->save();

            if($save)
            {

                $solcitacao_id=Solicitacao::where('id',$request->idsolcitacao)->first();
                $solcitacao_id->estadosolicitacao="concluido";
                $solcitacao_id->save();

                $SalvarAutoFísico['message']='Auto de Repção e Custódia Criado com Sucesso ';
                $SalvarAutoFísico['success']=true;//valor muito alto dos modulos
                return json_encode( $SalvarAutoFísico);
            }
            $SalvarAutoFísico['message']='Erro ao criar Auto físic, por favor tente mais tarde';
            $SalvarAutoFísico['success']=false;//valor muito alto dos modulos
            return json_encode( $SalvarAutoFísico);
    }
    
    
    
// END  Salvar Auto Fisico dos Serviços externos
    
    

    //Salvar AUtoFisico
    public function SalvarAutoVirtual(Request $request)
    {
       
        $num_Socltaco=DB::table('autos')->select('numeroauto')->max('numeroauto');

        if(empty($num_Socltaco) || $num_Socltaco==0)
            $num_Socltaco=0;

        $autocreate=new Auto();
        $autocreate->numeroauto=$num_Socltaco+1;
        $autocreate->nome=$request->nome_auto;
        $autocreate->naturezaauto="externa";
        $autocreate->tipoauto=$request->tiposolitacao;
        $autocreate->nota=$request->nota;
        $autocreate->formaexpedicao=$request->frorma_expedicao;
        $autocreate->solicitacao_id=$request->idsolcitacao;
        $autocreate->autor_id=Auth::id();
        $save=$autocreate->save();

            if($save)
            {

                $solcitacao_id=Solicitacao::where('id',$request->idsolcitacao)->first();
                $solcitacao_id->estadosolicitacao="concluido";
                $solcitacao_id->save();

                $SalvarAutoFísico['message']='Auto Criado com Sucesso ';
                $SalvarAutoFísico['success']=true;//valor muito alto dos modulos
                return json_encode( $SalvarAutoFísico);
            }
            $SalvarAutoFísico['message']='Erro ao criar Auto';
            $SalvarAutoFísico['success']=false;//valor muito alto dos modulos
            return json_encode( $SalvarAutoFísico);
    }

    

    public function SalvarAutoFísico(Request $request)
    {
        $data_saidaAjusada=$request->data_saida.' '.$request->form_hora_saida.':00';
        // $data_chegadaAjusada=$request->data_chegada.' '.$request->form_hora_chegada.':00';

        $datanow= date("Y-m-d");

        $SalvarAutoFísico['success']=false;//valor muito alto dos modulos
        
        if(empty($request->form_hora_saida) ){
                $SalvarAutoFísico['message']='o campo data de saida não pode estar vazio';
                return json_encode( $SalvarAutoFísico);
               }
                if(empty($request->data_saida)){

                            $data_saidaAjusada=$datanow.' '.$request->form_hora_saida.':00';

                    }
                    // if(empty($request->data_chegada))
                    // {
                    //      $data_chegadaAjusada=$datanow.' '.$request->form_hora_chegada.':00';
                      
                    //  }
        $num_Socltaco=DB::table('autos')->select('numeroauto')->max('numeroauto');
            if(empty($num_Socltaco) || $num_Socltaco==0)
                $num_Socltaco=0;

        $autocreate=new Auto();
        $autocreate->nome=$request->nome_auto;
        $autocreate->numeroauto=$num_Socltaco+1;
        $autocreate->naturezaauto="externa";
        $autocreate->tipoauto=$request->tipoAuto_create;
        $autocreate->horasaida=$data_saidaAjusada;
        $autocreate->nota=$request->notas;
        $autocreate->localdescarga=$request->form_descarga;
        $autocreate->detalhesauto=$request->detalhes;
        $autocreate->matriculaveiculo=$request->form_matricula;
        $autocreate->formaexpedicao=$request->form_expedicao;
        $autocreate->solicitacao_id=$request->idsolcitacao;
        $autocreate->entregue_por=$request->funcionario_entregue;
        $autocreate->autor_id=Auth::id();
        $save=$autocreate->save();

            if($save)
            {

                $solcitacao_id=Solicitacao::where('id',$request->idsolcitacao)->first();
                $solcitacao_id->estadosolicitacao="concluido";
                $solcitacao_id->save();

                $SalvarAutoFísico['message']='Auto Criado com Sucesso ';
                $SalvarAutoFísico['success']=true;//valor muito alto dos modulos
                return json_encode( $SalvarAutoFísico);
            }
            $SalvarAutoFísico['message']='Erro ao criar Auto físioc, por favor tente mais tarde';
            $SalvarAutoFísico['success']=false;//valor muito alto dos modulos
            return json_encode( $SalvarAutoFísico);
    }


    public function showaAll()
    {
        //notificacao Virtual
        $dados=$this->trazerSolictacoesAuto("virtual");
        $virtual="Virtual";
        return view('usuarios.funcionarios.pedidosConsultas.pedidos.virtuais.concluidos',['dados'=>$dados,'virtual'=>$virtual]);
    }
    public function showaAllFisicos()
    {
          //notificacao Virtual
          $dados=$this->trazerSolictacoesAuto("fisica");
          $virtual="Fisicos";
          return view('usuarios.funcionarios.pedidosConsultas.pedidos.fisicos.tratados',['dados'=>$dados,'virtual'=>$virtual]);
    }
    public function showaAllAutos_fisicos_virtuais()
    {
          //notificacao Virtual
          $dados=$this->trazerSolictacoesAutoAll();
          return view('usuarios.funcionarios.pedidosConsultas.pedidos.autolistar.autolistar',['dados'=>$dados]);
    }


//   i    m      p   r     i    m   i    r        a   u  t   o   s
    public function generatevirtual(Request $request)
    {
        $meu_id_decrypted="0";
        $meuid=$request->id_auto;
        try {
            $meu_id_decrypted = Crypt::decryptString($meuid);
        } catch (DecryptException $e) {
            return back();
        }


        $dados=$this->ImprimirAutoVisaoGeral($meu_id_decrypted);
        $virtaul='virtual';
            if($dados->solicitacaoadoc==="nao addoc")
                $solictado_por=Conversa::find($dados->conversa_id)->getUser->getPessoa;
                else $solictado_por=User::find($dados->user_id)->getPessoa;
        return View('usuarios.funcionarios.pedidosConsultas.pedidos.autogenerate.generate',['dados'=>$dados,'virtaul'=>$virtaul,
                                                                                            'solictado_por'=>$solictado_por]);
    
    } 
    //pdf
    public function generatevirtualPDF(Request $request)
    {
        $meu_id_decrypted="0";
        $meuid=$request->id_auto;
        try {
            $meu_id_decrypted = Crypt::decryptString($meuid);
        } catch (DecryptException $e) {
            return back();
        }


        $dados=$this->ImprimirAutoVisaoGeral($meu_id_decrypted);
        $virtaul='virtual';
            if($dados->solicitacaoadoc==="nao addoc")
                $solictado_por=Conversa::find($dados->conversa_id)->getUser->getPessoa;
                else $solictado_por=User::find($dados->user_id)->getPessoa;
         return \PDF::loadView('usuarios.funcionarios.pedidosConsultas.pedidos.autogenerate.pdfgenerate',['dados'=>$dados,'virtaul'=>$virtaul,
                                                                                            'solictado_por'=>$solictado_por])->stream();
    
    } 
    
    
// e   n   d   i    m      p   r     i    m   i    r        a   u  t   o   s





    public function trazerSolictacoesAuto($natureza)
    {
       $dados=Auto::join('users','users.id','autos.autor_id')
                    ->join('solicitacaos','solicitacaos.id','autos.solicitacao_id')
                    ->where('solicitacaos.naturezasolicitacao',$natureza)
                    ->Where('solicitacaos.estadosolicitacao',"concluido")
                    ->select('autos.*','solicitacaos.user_id','solicitacaos.assuntosolicitacao')->get();
       return $dados;
    }
    
    public function trazerSolictacoes_AutoServico_Extern($natureza)
    {
       $dados=Auto::join('users','users.id','autos.autor_id')
                    ->join('solicitacaos','solicitacaos.id','autos.solicitacao_id')
                    ->where('solicitacaos.naturezasolicitacao',$natureza)
                    ->Where('solicitacaos.estadosolicitacao',"concluido")
                    ->Where('autos.tipoauto',"Recepção e Custódia")
                    ->select('autos.*','solicitacaos.user_id','solicitacaos.assuntosolicitacao'
                            ,'solicitacaos.conversa_id')->get();
       return $dados;
    }
    public function trazerSolictacoesAutoAll()
    {
       $dados=Auto::join('users','users.id','autos.autor_id')
                    ->join('solicitacaos','solicitacaos.id','autos.solicitacao_id')
                    ->Where('solicitacaos.estadosolicitacao',"concluido")
                    ->select('autos.*','solicitacaos.user_id','solicitacaos.solicitacaoadoc','solicitacaos.assuntosolicitacao','solicitacaos.naturezasolicitacao')->get();
       return $dados;
    }

    public function ImprimirAutoVisaoGeral($id)
    {
       $dados=Auto::join('users','users.id','autos.autor_id')
                    ->join('solicitacaos','solicitacaos.id','autos.solicitacao_id')
                    ->where('autos.id',$id)
                    ->Where('solicitacaos.estadosolicitacao',"concluido")
                    ->select('autos.*','solicitacaos.user_id','solicitacaos.naturezasolicitacao',
                            'solicitacaos.assuntosolicitacao','solicitacaos.solicitacaoadoc',
                            'solicitacaos.conversa_id','solicitacaos.agenciasolicitacao')->first();
       return $dados;
    }

}
