<?php

namespace App\Http\Controllers;

use App\Models\Acesso;
use App\Models\Dispositivo;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
use Jenssegers\Agent\Agent; 
use App\Models\User;
use App\Models\Pessoa;
use App\Models\Funcionario; 
use App\Models\FuncionarioCliente;
use App\Models\Cliente;
use Exception;
use DataTables;


class autenticacao extends Controller
{

    function logar(Request $request){
    
        
     
        if (Auth::attempt(['email' => $request->email, 'password' => $request->senha])){
            $this->ClienteLogin();
            return true;
        }
        else{
            return false;
        }

    }
    function sair(Request $request){
      
        $agent = new Agent();
        $browser = $agent->browser();
        $versaoBrowser = $agent->version($browser);
        $ActualDeviceFoundId=0;

        $Devices = Dispositivo::where('user_id',Auth::id())->get();
        foreach($Devices as $Devi){


            if($Devi->browser==$browser){

                if($Devi->versaoBrowser==$versaoBrowser){
                    if ($Devi->user_id==Auth::id()){

                        $verificacao=true;
                        $ActualDeviceFoundId=$Devi->id;
                        break;
                    }
                }

            }

        }


        $acessos= Acesso::where('sessao','aberta')->where('dispositivo_id',$ActualDeviceFoundId)->first();

        if($acessos!=null){

            $acessos->sessao=1;
            $acessos->save();
        }else{

            // dd($acessos);
        }
        
         if($funcionarioEmpresaCliente = FuncionarioCliente::where('user_id',Auth::id())->first())
         {
             
             
         }
        
        Auth::logout();
        return redirect()->route('login');


    }
    function bloquear(Request $request){


        return view('bloqueado');

    }

    function addNewSolicitacao(  Request $request){

            $id= Auth::user()->id;
            $agent = new Agent();
            $browser = $agent->browser();
            $versaoBrowser = $agent->version($browser);
            $plataform = $agent->platform();
            $versaoPlataform = $agent->version($plataform);
            $device = $agent->device();
            $robot = $agent->robot();
            $usuario=Auth::user();
            $ip=request()->ip();
           
            // // Pegar mac address do computador
            // $mac = exec('getmac');
            // $ip = '154.127.212.219';
            $data = \Location::get($ip);
            $Devices = Dispositivo::where('user_id',Auth::id())->get();
            $agent = new Agent();
            $browser = $agent->browser();
            $plataform = $agent->platform();
            $device = $agent->device();
            $verificacao=false;

            // TENTATIVA DE CADASTRO DE UM NOVO DISPOSITIVO
            $Device= new Dispositivo();
                $Device->countryName=$data->countryName;
                $Device->countryCode=$data->countryCode;
                $Device->regionCode=$data->regionCode;
                $Device->regionName=$data->regionName;
                $Device->cityName=$data->cityName;
                $Device->latitude=$data->latitude;
                $Device->longitude=$data->longitude;
                $Device->browser=$browser;
                $Device->versaoBrowser=$versaoBrowser;
                $Device->plataform=$plataform;
                $Device->versaoPlataform=$versaoPlataform;
                $Device->device=$device;
                $Device->robot=$robot;
                $Device->ip=$ip;
                $Device->mac=0;
                $Device->user_id=$id;
                $Device->estado="null";
                $ActualDeviceFoundId=0;

                // ALGORITIMO DE VERIFICAÇÃO DE REDUNDÂNCIA DE DADOS NA BASE DE DADOS
                foreach($Devices as $Devi){


                    if($Devi->browser==$browser){

                        if($Devi->versaoBrowser==$versaoBrowser){
                            if ($Devi->user_id==Auth::id()){

                                $verificacao=true;
                                $ActualDeviceFoundId=$Devi->id;
                                break;
                            }
                        }

                    }

            }
            if($verificacao){
            }
            else{
                // EFECTIVAÇÃO DO CADASTRO DE UM NOVO DISPOSITIVO NA BASE DE DADOS
                $Device->save();
                $Devices = Dispositivo::where('user_id',Auth::id())->orderBy('id','desc')->first();
                $ActualDeviceFoundId=$Devices->id;

            }

            $countAccess=Acesso::count();
            $Acesso = new Acesso();
            $Acesso->dispositivo_id=$ActualDeviceFoundId;
            // $Acesso->user_id=Auth::id();


            if ($countAccess<=0){

                // Primeiro acesso

                $Acesso->estado=2;
                $Acesso->sessao=2;
                return 1;

            }else{

                $Asss=Acesso::where('dispositivo_id',$ActualDeviceFoundId)->where('sessao',2)->count();

                if ($Asss>=2){
                    //Exaustao de conta
                    $Acesso->estado=2;
                    $Acesso->sessao=1;

                    return 2;


                }
                else{
                    // Ainda pode se adicionar a conta
                    $Acesso->estado=2;
                    $Acesso->sessao=2;
                    return 1;

                }

            }
            $Acesso->save();



        }


        function verificaPermissao (){


            $Funcionario = Funcionario::where('user_id',Auth::id())->first();
           /* if($Funcionario){
                $Devices = Dispositivo::where('user_id',Auth::id())->get();
                $agent = new Agent();
                $browser = $agent->browser();
                $plataform = $agent->platform();
                $device = $agent->device();
                $ip=request()->ip(); 
                $data = \Location::get($ip);

                $verificacao=false;
                // dd($data);
                foreach($Devices as $Device){

                    if($Device->estado=="permitido"){
                        if($Device->countryName==$data->countryName){
                            if($Device->cityName==$data->cityName){
                                if($Device->ip==$ip){
                                    if($Device->device==$device){
                                        if($Device->plataform==$plataform){
                                            if($Device->browser==$browser){
                                                if($Device->user_id==Auth::id()){
                                                    $verificacao=true;
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                if($verificacao)
                return view('usuarios.home');
                else*/
                if($Funcionario)
                    return view('usuarios.funcionarios.dash1');
                else
                    if($funcionarioEmpresaCliente = FuncionarioCliente::where('user_id',Auth::id())->first())
                    {   //$this->ClienteLogin();
                        return view('usuarios.clientes.dashboard');
                    }
                    
                     Auth::logout();
                        return redirect()->back();
            /*
            }else{
             $funcionarioEmpresaCliente = FuncionarioCliente::where('user_id',Auth::id())->first();
            
                
                $Devices = Dispositivo::where('user_id',Auth::id())->get();
                $agent = new Agent();
                $browser = $agent->browser();
                $plataform = $agent->platform();
                $device = $agent->device();
                $ip=request()->ip(); 
                $data = \Location::get($ip);

                $verificacao=false;
                
            
                if($funcionarioEmpresaCliente)
                {
                    $verificacao=false;
                    foreach($Devices as $Device){
        
                        if($Device->estado=="permitido"){
                            if($Device->countryName==$data->countryName){
                                if($Device->cityName==$data->cityName){
                                    if($Device->ip==$ip){
                                        if($Device->device==$device){
                                            if($Device->plataform==$plataform){
                                                if($Device->browser==$browser){
                                                    if($Device->user_id==Auth::id()){
                                                        $verificacao=true;
                                                        break;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                
                    if($verificacao)
                      return view('usuarios.clientes.dashboard');
                     else           
                        return view('usuarios.home');
                }
            
            }   

                        Auth::logout();
                        return redirect()->back();

            */
        }

        public function showdevicespermitidos(){
            return DataTables::of(Dispositivo::where('estado','permitido')->where('user_id',Auth::id())->get())->addIndexColumn()
            ->addColumn('Mais', function($row){
                            $btn = '<a href="javascript:void(0)" class="edit btn btn-primary btn-sm">View</a>';
                            return $btn;
                        })->make(true);
        }
        public function showdevicesbarrados(){
            return DataTables::of(Dispositivo::where('estado','barrado')->where('user_id',Auth::id())->get())->addIndexColumn()
            ->make(true);
        }
        public function showdevicespendentes(){
            return DataTables::of(Dispositivo::where('estado','solicitado')->where('user_id',Auth::id())->where('user_id',Auth::id())->get())->addIndexColumn()
            ->make(true);
        }
        public function showdevicesporsolicitar(){
            return DataTables::of(Dispositivo::where('estado','null')->where('user_id',Auth::id())->get())->addIndexColumn()
            ->addColumn('solicitar', function($row){
                            $id=$row->id;
                            $btn = '<a href="'.route('us.disp.showdevicesporsolicitar_solicitar',$id).'"  class="edit btn btn-info btn-sm"> <i class=\"fa fa-angle-right\"><i/> Solicitar</a>';
                            return $btn;
                        })->rawColumns(['solicitar'])->make(true);
        }

        public function showdevicespendentes_especial($id){

            return DataTables::of(Dispositivo::where('estado','solicitado')->get())->addIndexColumn()
            ->addColumn('aceitar', function($row){
                            $id=$row->id;
                            $btn = '<a href="'.route('us.disp.showdevicesporsolicitar_solicitar',$id).'"  class="edit btn btn-success btn-sm"> <i class="fa fa-check"><i/> Aceitar</a>';
                            return $btn;
                        })->rawColumns(['aceitar'])->make(true);
        }




        public function showdevicesporsolicitar_solicitar(Request $request, $id){

                $dispositivo=Dispositivo::where('user_id',Auth::id())->where('id',$id)->where('estado','null')->first();

                if($dispositivo){

                    $dispositivo->estado=3;
                    $dispositivo->save();

                }

                // return redirect()->route('us.disp.dash2');
                return redirect()->back();
        }





        public function aceitar_device ($id){
            $dispositivo=Dispositivo::where('id',$id)->where('estado','solicitado')->first();

            if($dispositivo){

                $dispositivo->estado=4;
                $dispositivo->save();

            }

                // return redirect()->route('us.disp.dash2');
            return redirect()->back();
        }
        public function barrar_device ($id){


            $dispositivo=Dispositivo::where('id',$id)->where('estado','solicitado')->first();

            if($dispositivo){

                $dispositivo->estado=2;
                $dispositivo->save();

            }

            $dispositivo=Dispositivo::where('id',$id)->where('estado','permitido')->first();

            if($dispositivo){

                $dispositivo->estado=2;
                $dispositivo->save();

            }
            // dd($id);
            return redirect()->back();

        }

        public function recuperar_device ($id){

            $dispositivo=Dispositivo::where('id',$id)->where('estado','barrado')->first();

            if($dispositivo){

                $dispositivo->estado=4;
                $dispositivo->save();

            }
            // dd($id);
            return redirect()->back();

        }

    
    
            public function ClienteLogin()
            {
    
                $id= Auth::user()->id;
                $agent = new Agent();
                $browser = $agent->browser();
                $versaoBrowser = $agent->version($browser);
                $plataform = $agent->platform();
                $versaoPlataform = $agent->version($plataform);
                $device = $agent->device();
                $robot = $agent->robot();
                $usuario=Auth::user();
                $ip=request()->ip();
                // Pegar mac address do computador
               // $mac = exec('getmac');
                $ip = '154.127.212.219';
                $data = \Location::get($ip);
                $Devices = Dispositivo::where('user_id',Auth::id())->get();
                $agent = new Agent();
                $browser = $agent->browser();
                $plataform = $agent->platform();
                $device = $agent->device();
                $verificacao=true;
    
                // TENTATIVA DE CADASTRO DE UM NOVO DISPOSITIVO
                $Device= new Dispositivo();
                    $Device->countryName=$data->countryName;
                    $Device->countryCode=$data->countryCode;
                    $Device->regionCode=$data->regionCode;
                    $Device->regionName=$data->regionName;
                    $Device->cityName=$data->cityName;
                    $Device->latitude=$data->latitude;
                    $Device->longitude=$data->longitude;
                    $Device->browser=$browser;
                    $Device->versaoBrowser=$versaoBrowser;
                    $Device->plataform=$plataform;
                    $Device->versaoPlataform=$versaoPlataform;
                    $Device->device=$device;
                    $Device->robot=$robot;
                    $Device->ip=$ip;
                    $Device->mac="mac";
                    $Device->user_id=$id;
                    $ActualDeviceFoundId=0;
    
                    $dispositivoOn=$Device->save();
    
            if($dispositivoOn)
            {
                $idDispositvoNEw=$Device->id;
                $meuAcesso=new Acesso();
                $meuAcesso->dispositivo_id=$idDispositvoNEw;
                $meuAcesso->sessao="aberta";
                $meuAcesso->estado="sucesso";
                $meuAcesso->save();
            }
        }
            
             public function ClienteDeslogar()
            {
    
                $id= Auth::user()->id;
           
                // TENTATIVA DE CADASTRO DE UM NOVO DISPOSITIVO
                $Device= new Dispositivo();
                    $Device->countryName=$data->countryName;
                    $Device->countryCode=$data->countryCode;
                    $Device->regionCode=$data->regionCode;
                    $Device->regionName=$data->regionName;
                    $Device->cityName=$data->cityName;
                    $Device->latitude=$data->latitude;
                    $Device->longitude=$data->longitude;
                    $Device->browser=$browser;
                    $Device->versaoBrowser=$versaoBrowser;
                    $Device->plataform=$plataform;
                    $Device->versaoPlataform=$versaoPlataform;
                    $Device->device=$device;
                    $Device->robot=$robot;
                    $Device->ip=$ip;
                    $Device->mac="mac";
                    $Device->user_id=$id;
                    $ActualDeviceFoundId=0;
    
                    $dispositivoOn=$Device->save();
    
            if($dispositivoOn)
            {
                $idDispositvoNEw=$Device->id;
                $meuAcesso=new Acesso();
                $meuAcesso->dispositivo_id=$idDispositvoNEw;
                $meuAcesso->sessao="aberta";
                $meuAcesso->estado="sucesso";
                $meuAcesso->save();
            }
        }
}
