<?php
/**
 * Helper de Autenticação - Checkout Pro 2025
 * 
 * Funções auxiliares para gerenciar autenticação de usuários
 * e verificação de permissões.
 */

// Garantir que a sessão está iniciada
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

/**
 * Verifica se há um usuário logado
 * @return array|false Retorna array com dados do usuário ou false se não estiver logado
 */
function usuario_logado() {
    if (!isset($_SESSION['usuario_id']) || empty($_SESSION['usuario_id'])) {
        return false;
    }
    
    return [
        'id' => $_SESSION['usuario_id'],
        'nome' => $_SESSION['usuario_nome'] ?? '',
        'email' => $_SESSION['usuario_email'] ?? '',
        'tipo' => $_SESSION['usuario_tipo'] ?? 'usuario',
        'status' => $_SESSION['usuario_status'] ?? 'ativo'
    ];
}

/**
 * Verifica se o usuário logado é um administrador
 * @return bool
 */
function eh_admin() {
    $usuario = usuario_logado();
    return $usuario && $usuario['tipo'] === 'admin' && $usuario['status'] === 'ativo';
}

/**
 * Verifica se o usuário logado é um usuário comum
 * @return bool
 */
function eh_usuario() {
    $usuario = usuario_logado();
    return $usuario && $usuario['tipo'] === 'usuario' && $usuario['status'] === 'ativo';
}

/**
 * Verifica se o usuário está logado e ativo
 * @return bool
 */
function esta_logado() {
    $usuario = usuario_logado();
    return $usuario !== false && $usuario['status'] === 'ativo';
}

/**
 * Requer que o usuário esteja logado
 * Redireciona para login se não estiver
 * @param string $redirect_url URL para redirecionar (padrão: login.php)
 */
function requer_login($redirect_url = '/dashboard/login.php') {
    if (!esta_logado()) {
        header("Location: " . $redirect_url);
        exit;
    }
}

/**
 * Requer que o usuário seja administrador
 * Redireciona para área do usuário ou login se não for admin
 * @param string $redirect_url URL para redirecionar (padrão: área do usuário)
 */
function requer_admin($redirect_url = '/dashboard/usuario.php') {
    requer_login();
    
    if (!eh_admin()) {
        // Se for usuário comum, redireciona para área do usuário
        if (eh_usuario()) {
            header("Location: " . $redirect_url);
        } else {
            // Se não for nem admin nem usuário, volta para login
            header("Location: /dashboard/login.php");
        }
        exit;
    }
}

/**
 * Requer que o usuário seja usuário comum (não admin)
 * Redireciona para dashboard admin se for admin
 * @param string $redirect_url URL para redirecionar (padrão: dashboard admin)
 */
function requer_usuario($redirect_url = '/dashboard/index.php') {
    requer_login();
    
    if (eh_admin()) {
        header("Location: " . $redirect_url);
        exit;
    }
    
    if (!eh_usuario()) {
        header("Location: /dashboard/login.php");
        exit;
    }
}

/**
 * Faz login do usuário
 * @param array $usuario Dados do usuário (id, nome, email, tipo, status)
 * @return bool
 */
function fazer_login($usuario) {
    if (empty($usuario['id']) || empty($usuario['email'])) {
        return false;
    }
    
    $_SESSION['usuario_id'] = $usuario['id'];
    $_SESSION['usuario_nome'] = $usuario['nome'] ?? '';
    $_SESSION['usuario_email'] = $usuario['email'];
    $_SESSION['usuario_tipo'] = $usuario['tipo'] ?? 'usuario';
    $_SESSION['usuario_status'] = $usuario['status'] ?? 'ativo';
    $_SESSION['loggedin'] = true; // Mantém compatibilidade com código antigo
    
    return true;
}

/**
 * Faz logout do usuário
 */
function fazer_logout() {
    $_SESSION = array();
    
    if (isset($_COOKIE[session_name()])) {
        setcookie(session_name(), '', time() - 3600, '/');
    }
    
    session_destroy();
}

/**
 * Obtém o ID do usuário logado
 * @return int|null
 */
function get_usuario_id() {
    return $_SESSION['usuario_id'] ?? null;
}

/**
 * Obtém o nome do usuário logado
 * @return string
 */
function get_usuario_nome() {
    return $_SESSION['usuario_nome'] ?? '';
}

/**
 * Obtém o tipo do usuário logado
 * @return string
 */
function get_usuario_tipo() {
    return $_SESSION['usuario_tipo'] ?? 'usuario';
}


