<?php
/**
 * Demo Oracle — controle d'acces, volontairement minimal.
 *
 * Le module Oracle complet porte ici 291 lignes : groupes, sous-groupes,
 * grants directs, grants par groupe Active Directory, roles internes
 * composables avec detection de cycle, et trois niveaux de droits
 * (consultation < dba_dev < dba) consultes par chaque action d'ecriture.
 *
 * La demonstration n'a rien de tout cela, et c'est le sujet : aucune action
 * d'ecriture n'existe, donc aucun niveau de droit n'a de sens. Restent deux
 * questions, auxquelles le coeur repond deja :
 *   - qui peut consulter ?          -> role demo_oracle_user (ou _admin)
 *   - qui peut declarer les bases ? -> role demo_oracle_admin
 *
 * Safe to include multiple times (guard sur function_exists).
 */
if (function_exists('demo_oracle_is_manager')) return;

/**
 * Peut declarer, modifier et supprimer les bases de demonstration.
 * `app_admin` reste super-role implicite, comme partout dans l'application.
 */
function demo_oracle_is_manager(?array $user): bool
{
    if (!$user) return false;
    $roles = $user['roles'] ?? [];
    return in_array(ROLE_APP_ADMIN, $roles, true)
        || in_array('demo_oracle_admin', $roles, true);
}

/**
 * Toutes les bases declarees, de la plus recente a la plus ancienne.
 *
 * Aucun filtrage par utilisateur : dans la demonstration, qui accede au module
 * voit les cinq bases. C'est precisement ce que le module complet raffine.
 */
function demo_oracle_databases(Database $db): array
{
    return $db->fetchAll(
        "SELECT id, name, conn_type, host, port, service_name, tns_alias,
                wallet_path, username, sysdba, description
           FROM demo_oracle_databases
          ORDER BY name"
    );
}

/** Une base par son identifiant ; `[]` si elle n'existe pas. */
function demo_oracle_database(Database $db, int $id): array
{
    $row = $db->fetchOne(
        "SELECT id, name, conn_type, host, port, service_name, tns_alias,
                wallet_path, username, sysdba, description
           FROM demo_oracle_databases
          WHERE id = ?",
        [$id]
    );
    return $row ?: [];
}
