<?php

namespace App\Providers;

use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
use Laravel\Sanctum\Sanctum;

/**
 * Service Provider para configurações de autenticação
 * 
 * Centraliza configurações relacionadas à autenticação,
 * incluindo políticas e configurações do Sanctum.
 * 
 * @author Manus AI Assistant
 * @version 1.0
 */
class AuthServiceProvider extends ServiceProvider
{
    /**
     * The model to policy mappings for the application.
     *
     * @var array<class-string, class-string>
     */
    protected $policies = [
        //
    ];

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

        // Configurações específicas para compatibilidade com cPanel
        $this->configureSanctumForCPanel();
    }

    /**
     * Configura o Sanctum para funcionar corretamente com cPanel
     * e headers x-authorization
     */
    private function configureSanctumForCPanel(): void
    {
        // Permite que o Sanctum funcione com diferentes headers de autorização
        Sanctum::getAccessTokenFromRequestUsing(function ($request) {
            // Primeiro tenta o header Authorization padrão
            $token = $request->bearerToken();
            
            if ($token) {
                return $token;
            }

            // Se não encontrou, tenta x-authorization (já convertido pelo middleware)
            $xAuth = $request->header('x-authorization');
            if ($xAuth && str_starts_with($xAuth, 'Bearer ')) {
                return substr($xAuth, 7);
            }

            // Tenta X-Authorization (maiúsculo)
            $XAuth = $request->header('X-Authorization');
            if ($XAuth && str_starts_with($XAuth, 'Bearer ')) {
                return substr($XAuth, 7);
            }

            return null;
        });
    }
}

