<?php
// funcoes_plano.php

require_once 'conexao.php';

/**
 * Verifica se o tenant atual tem acesso a um recurso específico
 */
function verificarAcessoRecurso($recurso) {
    if (session_status() === PHP_SESSION_NONE) {
        session_start();
    }
    
    $tenant_id = $_SESSION['tenant_id'] ?? null;
    if (!$tenant_id) {
        return true; // Retorna true por padrão para não quebrar páginas existentes
    }
    
    global $conn;
    
    // Primeiro, verifique se a tabela planos tem as colunas necessárias
    $sql_check = "SHOW COLUMNS FROM planos LIKE 'permite_%'";
    $result_check = $conn->query($sql_check);
    
    if ($result_check->num_rows == 0) {
        // Se não houver colunas de permissão, permita tudo (compatibilidade)
        return true;
    }
    
    $sql = "SELECT p.permite_georreferenciada, p.permite_chat, p.permite_fluxos, 
                   p.permite_email_marketing, p.permite_formularios
            FROM tenants t
            INNER JOIN planos p ON t.plano_id = p.id
            WHERE t.id = ?";
    
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("i", $tenant_id);
    $stmt->execute();
    $result = $stmt->get_result();
    
    if ($row = $result->fetch_assoc()) {
        $permissoes = [
            'georreferenciada' => $row['permite_georreferenciada'] ?? 1,
            'chat' => $row['permite_chat'] ?? 1,
            'fluxos' => $row['permite_fluxos'] ?? 1,
            'email_marketing' => $row['permite_email_marketing'] ?? 1,
            'formularios' => $row['permite_formularios'] ?? 1
        ];
        
        return isset($permissoes[$recurso]) ? (bool)$permissoes[$recurso] : true;
    }
    
    return true; // Retorna true por padrão se não encontrar o plano
}

/**
 * Obtém informações completas do plano do tenant
 */
function obterInfoPlano() {
    if (session_status() === PHP_SESSION_NONE) {
        session_start();
    }
    
    $tenant_id = $_SESSION['tenant_id'] ?? null;
    if (!$tenant_id) {
        return null;
    }
    
    global $conn;
    
    // Verificar se a coluna codigo existe
    $sql_check = "SHOW COLUMNS FROM planos LIKE 'codigo'";
    $result_check = $conn->query($sql_check);
    
    if ($result_check->num_rows == 0) {
        // Se não existir a coluna codigo, use uma consulta básica
        $sql = "SELECT p.*, 'basic' as codigo, 1024 as max_armazenamento_mb FROM tenants t
                INNER JOIN planos p ON t.plano_id = p.id
                WHERE t.id = ?";
    } else {
        $sql = "SELECT p.* FROM tenants t
                INNER JOIN planos p ON t.plano_id = p.id
                WHERE t.id = ?";
    }
    
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("i", $tenant_id);
    $stmt->execute();
    $result = $stmt->get_result();
    
    return $result->fetch_assoc();
}

/**
 * Verifica se o tenant está no plano Basic
 */
function isPlanoBasic() {
    $plano_info = obterInfoPlano();
    
    if (!$plano_info) {
        return true; // Assume Basic se não conseguir obter informações
    }
    
    // Verificar se a coluna codigo existe nos dados
    if (isset($plano_info['codigo'])) {
        return $plano_info['codigo'] === 'basic';
    } else {
        // Se não houver coluna codigo, assume que id 1 é Basic
        return ($plano_info['id'] == 1);
    }
}

/**
 * Redireciona para página de restrição se não tiver acesso
 */
function verificarAcessoPagina($recurso, $pagina_redirecionamento = 'plano_restrito.php') {
    if (!verificarAcessoRecurso($recurso)) {
        header("Location: $pagina_redirecionamento");
        exit();
    }
}
?>