<?php
/*
desenvolvedor: luciano donizeti
mania de script: www.maniadescript.com.br
whatsapp 43998240911
*/

/**
 * Helper para bloquear alteração própria de usuário/senha por revendedores.
 * A coluna é criada automaticamente para manter compatibilidade com instalações antigas.
 */
if (!function_exists('ensureCredenciaisLockColumn')) {
    function ensureCredenciaisLockColumn(PDO $pdo) {
        static $done = false;
        if ($done) return true;

        try {
            $stmt = $pdo->query("SHOW COLUMNS FROM usuarios LIKE 'bloquear_credenciais'");
            if (!$stmt->fetch(PDO::FETCH_ASSOC)) {
                $pdo->exec("ALTER TABLE usuarios ADD COLUMN bloquear_credenciais TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1=bloqueia alteracao propria de usuario e senha' AFTER ativo");
            }
            $done = true;
            return true;
        } catch (PDOException $e) {
            if (function_exists('debugSession')) {
                debugSession('Erro ao garantir coluna bloquear_credenciais: ' . $e->getMessage());
            } else {
                @error_log(date('Y-m-d H:i:s') . ' - Erro ao garantir coluna bloquear_credenciais: ' . $e->getMessage() . "\n", 3, 'session_debug.log');
            }
            return false;
        }
    }
}

if (!function_exists('usuarioTemCredenciaisBloqueadas')) {
    function usuarioTemCredenciaisBloqueadas(PDO $pdo, $userId = null, $username = null, $email = null) {
        ensureCredenciaisLockColumn($pdo);

        try {
            if ($userId !== null) {
                $stmt = $pdo->prepare("SELECT nivel, bloquear_credenciais FROM usuarios WHERE id = ? LIMIT 1");
                $stmt->execute([$userId]);
            } elseif ($username !== null) {
                $stmt = $pdo->prepare("SELECT nivel, bloquear_credenciais FROM usuarios WHERE username = ? LIMIT 1");
                $stmt->execute([$username]);
            } elseif ($email !== null) {
                $stmt = $pdo->prepare("SELECT nivel, bloquear_credenciais FROM usuarios WHERE email = ? LIMIT 1");
                $stmt->execute([$email]);
            } else {
                return false;
            }

            $user = $stmt->fetch(PDO::FETCH_ASSOC);
            if (!$user) return false;

            // O admin master nunca é bloqueado por esta regra.
            return ((int)$user['nivel'] !== 1 && (int)$user['bloquear_credenciais'] === 1);
        } catch (PDOException $e) {
            if (function_exists('debugSession')) {
                debugSession('Erro ao verificar bloqueio de credenciais: ' . $e->getMessage());
            } else {
                @error_log(date('Y-m-d H:i:s') . ' - Erro ao verificar bloqueio de credenciais: ' . $e->getMessage() . "\n", 3, 'session_debug.log');
            }
            return false;
        }
    }
}
?>
