<?php

namespace App\Http\Controllers;

use App\Models\Cliente;
use App\Models\FuncionarioCliente;
use App\Models\Regra;
use App\Models\Categoria;
use App\Models\CategoriaRegra;
use App\Models\CategoriaCliente;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Gate;
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Support\Facades\Crypt;

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

    public function index()
    {   
         Gate::denies('clientes',"ver acessos");
            
                //abort(403,'não tens permissão para acessar esta página');

        $idEmpresLocal=FuncionarioCliente::trazer_Empresa_id();
        $regra_autorizada=$this->trazer_Aceso_regras();
      
        $idEmpesa=FuncionarioCliente::trazer_Empresa_id();
        $categoria=CategoriaCliente::join('clientes','clientes.id','categoriaclientes.cliente_id')
                                    ->where('categoriaclientes.cliente_id',$idEmpesa->id)
                                    ->where('categoriaclientes.categoriacliente','!=','Administrador')->get();
        $regra=Regra::all();    
        return view('usuarios.clientes.acesso.cliente_acesso.acesso',['idEmpresLocal'=>$idEmpresLocal,'regra'=>$regra,
                                                          'categoria'=>$categoria,'regra_autorizada'=>$regra_autorizada]);
        //return view('usuarios.clientes.acesso.cliente_acesso.acesso',['idEmpresLocal'=>$idEmpresLocal,'regra'=>$regra,
                                                        //'categoria'=>$categoria,'regra_autorizada'=>$regra_autorizada]);
            
    }
    

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        Gate::denies('clientes',"cadastrar acessos");
            
                //abort(403,'não tens permissão para acessar esta página');

        $idEmpresLocal=FuncionarioCliente::trazer_Empresa_id();
        $regra_autorizada=$this->trazer_Aceso_regras();
      
        $idEmpesa=FuncionarioCliente::trazer_Empresa_id();
        $categoria=CategoriaCliente::join('clientes','clientes.id','categoriaclientes.cliente_id')->where('categoriacliente','!=','Super')
            ->where('categoriaclientes.cliente_id',$idEmpesa->id)->where('categoriacliente','!=','Administrador')->get();
        $regra=Regra::all();    
        return view('usuarios.clientes.acesso.cliente_acesso.create',['idEmpresLocal'=>$idEmpresLocal,'regra'=>$regra,
                                                          'categoria'=>$categoria,'regra_autorizada'=>$regra_autorizada]);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {   
        Gate::denies('clientes',"distribuir acessos");
             
                for($i=0; $i<=count($request->permissao)-1; $i++)
                {   
                    if( $this->ja_Existe($request->idCategoria,$request->permissao[$i]) )
                    {
                        //dd($request->permissao[$i]);
                        CategoriaRegra::create([
                                                'categoria_cliente_id'=>$request->idCategoria,
                                                'regra_id'=>$request->permissao[$i],
                                                ]);
                    }
                } 
                        $store['message']='Autorizações Concedidas com sucesso';
                        $store['success']=true;//valor muito alto dos modulos
                        return json_encode( $store); 
                        //return redirect()->route('us.admin.cliente.permissoes.permissoes.index')->with('regrasSucesso','Cadastrado com Sucesso');;
            
          
                // $store['message']='a Categoria referida ja tem está Permissão';
                // $store['success']=false;//valor muito alto dos modulos
                // return json_encode( $store);  
            
            // $store['message']='Erro, Impossivel efectuar esta operação';
            // $store['success']=false;//valor muito alto dos modulos
            // return json_encode( $store);   
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Regra  $regra
     * @return \Illuminate\Http\Response
     */
    public function show(Regra $regra)
    {
        //
    }

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

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

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Regra  $regra
     * @return \Illuminate\Http\Response
     */
    public function destroy(Regra $regra)
    {
        //
    }
    
    
    
      // A C L    S  E  R  I  E   D  O   C  U  M   E  N  T   A  L
      
      public function choose_ACL_serieDoc()
      {
          
           $idEmpesa=FuncionarioCliente::trazer_Empresa_id();
             $dados= new \App\Http\Controllers\FuncionarioClienteController();
             $funcionarioclientes=$dados->trazerFuncionarios($idEmpesa->id);
          return view('usuarios.clientes.acesso.pesquisadocumental.acl_consulta_choose',['funcionarioclientes'=>$funcionarioclientes]);
      }
    public function create_ACL_serieDoc(Request $request)
    {
       dd(Auth::id()."".$request->meduIdFunciCode);
        return view('usuarios.clientes.acesso.pesquisadocumental.acl_pesquisadoc',['id_cliente'=>$id_cliente->id]);
    }

    public function open_ACL_serieDoc()
    {
        
            
        return view('usuarios.clientes.acesso.pesquisadocumental.consulta_acl_index');
    }

    
    
    

    public function trazer_Aceso_regras()
    {    
        $idEmpesa=FuncionarioCliente::trazer_Empresa_id();
        
        $dados=DB::table('categoria_cliente_regra')
                ->join('categoriaclientes','categoriaclientes.id','=','categoria_cliente_regra.categoria_cliente_id')
                ->join('regras','regras.id','=','categoria_cliente_regra.regra_id')
                ->where('categoriaclientes.cliente_id',$idEmpesa->id)
                ->where('categoriaclientes.categoriacliente','!=','Administrador')
                ->select('categoriaclientes.categoriacliente','regras.autorizacao','categoriaclientes.id')->get();
        return $dados;
    }
      public function trazerRegrasCategoria($idcategoria)
    {    
        $idEmpesa=FuncionarioCliente::trazer_Empresa_id();
        
        $dados=DB::table('categoria_cliente_regra')
                ->join('categoriaclientes','categoriaclientes.id','=','categoria_cliente_regra.categoria_cliente_id')
                ->join('regras','regras.id','=','categoria_cliente_regra.regra_id')
                ->where('categoriaclientes.cliente_id',$idEmpesa->id)
                ->where('categoria_cliente_regra.categoria_cliente_id',$idcategoria)
                ->where('categoriaclientes.categoriacliente','!=','Administrador')
                ->select('categoriaclientes.categoriacliente','regras.autorizacao','categoria_cliente_regra.regra_id')->get();
        return $dados;
    }


    public function ja_Existe($categoria,$idregra)
    {
        $dados=DB::table('categoria_cliente_regra')
                        ->join('regras','regras.id','=','categoria_cliente_regra.regra_id')
                        ->join('categoriaclientes','categoriaclientes.id','=','categoria_cliente_regra.categoria_cliente_id')
                        ->where('categoria_cliente_regra.regra_id',$idregra)
                        ->where('categoria_cliente_regra.categoria_cliente_id',$categoria)
                        ->select('*')->get();
        //dd($dados);
        if($dados->isEmpty())
            return true;
    
     return false;
    }







    //P    E   R    M    I    S     S     O    E    S         G     E    S    T   D   O    C 

    public function permissaoClientesGestdocList()
    {

        
        $acessoFuncionario=CategoriaCliente::join('categoria_cliente_regra','categoria_cliente_regra.categoria_cliente_id','categoriaclientes.id')
                                            ->join('regras','regras.id','categoria_cliente_regra.regra_id')
                                            ->join('clientes','clientes.id','categoriaclientes.cliente_id')
                                            ->select('categoriaclientes.id','categoriaclientes.categoriacliente','regras.autorizacao',
                                                     'categoriaclientes.cliente_id')
                                            ->orderBy('categoriaclientes.categoriacliente','asc')->get();
       // dd($acessoFuncionario);
        return view('usuarios.funcionarios.admin.acessocliente.index',['acessoFuncionario'=>$acessoFuncionario]);

    }
    public function permissaoClientesGestdoc()
    {
        $categoriasCli=CategoriaCliente::get();
        $regra=Regra::all();
        return view('usuarios.funcionarios.admin.acessocliente.permissoes',['categoriasCli'=>$categoriasCli,'regras'=>$regra]);

    }

    public function cadastroPermissaosGestdoc(Request $request)
    {
        for($i=0;$i<=count($request->idpermissao)-1;$i++){

            if( $this->ja_Existe($request->categoria_id,$request->idpermissao[$i]) )
            {
                CategoriaRegra::create(['regra_id'=>$request->idpermissao[$i],
                                        'categoria_cliente_id'=>$request->categoria_id]);
            }
        }
                        $store['message']='Autorizações Concedidas com sucesso';
                        $store['success']=true;//valor muito alto dos modulos
                        return json_encode( $store); 
    }

    public function editarPermissaosGestdoc(Request $request)
    {
        for($i=0;$i<=count($request->idpermissao)-1;$i++){

            if( $this->ja_Existe($request->categoria_id,$request->idpermissao[$i]) )
            {
                CategoriaRegra::create(['regra_id'=>$request->idpermissao[$i],
                                        'categoria_cliente_id'=>$request->categoria_id]);
            }
        }
                        $store['message']='Autorizações Concedidas com sucesso';
                        $store['success']=true;//valor muito alto dos modulos
                        return json_encode( $store); 
    }

    public function editPermissaosGestdoc(Request $request)
    {


        $meu_id_decrypted="0";
                $meuid=$request->usuario_id;
                try {
                    $meu_id_decrypted = Crypt::decryptString($meuid);
                } catch (DecryptException $e) {
                    return back();
                }
            if($usershowsCategoria=CategoriaCliente::where('id',$meu_id_decrypted)->first())
              {  
                $usershowsPermissaos=CategoriaCliente::join('categoria_cliente_regra','categoria_cliente_regra.categoria_cliente_id','categoriaclientes.id')
                                                    ->join('regras','regras.id','categoria_cliente_regra.regra_id')
                                                    ->join('clientes','clientes.id','categoriaclientes.cliente_id')
                                                    ->select('categoriaclientes.id','categoriaclientes.categoriacliente','regras.autorizacao',
                                                            'categoriaclientes.cliente_id')
                                                    ->where('categoriaclientes.id',$meu_id_decrypted)
                                                    ->orderBy('categoriaclientes.categoriacliente','asc')->select('regras.id')->get();
                $regras=Regra::all();
                return view('usuarios.funcionarios.admin.acessocliente.editar',['usershows'=>$usershowsPermissaos,'regras'=>$regras,
                                                                                'categorias'=>$usershowsCategoria,]);
            }
            return redirect()->back();
    }

}
