<?php

namespace App\Providers;

use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate as GateContract;
use App\Models\ArmazemModel;
use App\Policies\PoliticasGestdoc;
use App\Models\User;
use App\Models\Regra;
use App\Models\FuncionarioCliente;
use App\Models\CategoriaRegra;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        User::class => PoliticasGestdoc::class,
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot(GateContract $gate)
    {
            $this->registerPolicies($gate);

            
            $gate::define('clientes',function (User $user,$regras) 
            { 

                    $funcionario_cliente=new FuncionarioCliente();
                    $regras_class=new Regra();

                    $id_regra_control=$regras_class->autenticar_regra($regras);
                    //minhas categorias atreladas a essa reras
                
                    $minnhaRegra=Regra::find($id_regra_control->id)->getRegras_categoria;
                    
                    //trouxe a categoria do wi logado
                    $categoria_user=$funcionario_cliente->hasCategorias();

                    //________se a regra estiver vazio entao essa regra não existe
                    if($categoria_user==="Administrador")
                    {
                        return true;
                    }
                
                if( $minnhaRegra->isEmpty() )
                    {
                        abort(403,'não tens permissão para acessar esta página');
                    }
                
                    
                    //___regra existe 
                    if( is_array($minnhaRegra) || is_object($minnhaRegra) )
                    {
                        //______com esssa regra traga, posso ir buscar a categoria a qual esta atrelado e verificar se é armazem
                        //mesma que a do usuario Logado
                        foreach($minnhaRegra as $Acategorias)
                        {     
                            if($Acategorias->categoriacliente === $categoria_user)
                        
                            return true;
                        }
                    
                    }else
                        {
                            if($Acategorias->categoriacliente === $categoria_user)
                            return true;
                        }

                    // dd($Acategorias->categoria ."==23=". $categoria_user);
                abort(403,'não tens permissão para acessar esta página');

            });
        


            $gate::define('clientes_view',function (User $user,$regras) 
            { 

                    $funcionario_cliente=new FuncionarioCliente();
                    $regras_class=new Regra();

                        $id_regra_control=$regras_class->autenticar_regra_view($regras);
                        //minhas categorias atreladas a essa reras
                        if($id_regra_control==="vazio")
                            {
                                    return false;
                            }
                        
                    
                    //buscar a regra do de um determinado indiviudo que está logado
                        $minnhaRegra=Regra::find($id_regra_control->id)->getRegras_categoria;
                        //trouxe a categoria do wi logado
                    
                        $categoria_user=$funcionario_cliente->hasCategorias();
                    
                        if($categoria_user==="Administrador")
                        {
                            return true;
                        }

                                //________se a regra estiver vazio entao essa regra não existe
                        if( $minnhaRegra->isEmpty() )
                            {
                                return false;
                            }
                            
                            //___regra existe 
                            if( is_array($minnhaRegra) || is_object($minnhaRegra) )
                            {
                                //______com esssa regra traga, posso ir buscar a categoria a qual esta atrelado e verificar se é armazem
                                //mesma que a do usuario Logado
                                foreach($minnhaRegra as $Acategorias)
                                {     
                                
                                    if($Acategorias->categoriacliente === $categoria_user)
                                
                                    return true;
                                }
                            
                            }else
                                {
                                    if($Acategorias->categoriacliente === $categoria_user)
                                    return true;
                                }

                            // dd($Acategorias->categoria ."==23=". $categoria_user);
                        return false;

            });
    }
}
