<?php
/**
 * Demo Oracle — historique d'activite (section « history »).
 *
 * Portage de modules/oracle/_report_history.php : courbe ASH horaire et trois
 * cartes de chaleur (charge, entrees-sorties, commutations de redo).
 *
 * UN plafond : la profondeur est figee a DEMO_ORACLE_HISTORY_DAYS, la ou le
 * module complet propose 1, 7 et 30 jours. La valeur ne vient pas de $_GET —
 * une URL forgee ne change rien.
 *
 * Inclus par report.php. Variables : $oraDb, $db, $currentUser, $settings.
 */

/** @var array      $oraDb       */
/** @var object     $db          */
/** @var array|null $currentUser */

require_once __DIR__ . '/lib/DemoOracleOciConnect.php';
require_once __DIR__ . '/lib/DemoOracleAshSource.php';
require_once __DIR__ . '/lib/DemoOracleAshRepository.php';
require_once __DIR__ . '/lib/DemoOracleBashSnapperRepository.php';

/*
 * Profondeur figee.
 *
 * Le module complet propose 1, 7 et 30 jours ; la demonstration s'en tient a
 * DEMO_ORACLE_HISTORY_DAYS. La valeur n'est pas lue dans $_GET : ce n'est pas
 * un oubli, c'est le plafond. Les trois boutons restent affiches, deux
 * desactives — voir la vue.
 */
$days = DEMO_ORACLE_HISTORY_DAYS;

/* ── Data ───────────────────────────────────────────────────────────────────── */
$fetchError   = null;
$hasLicense   = false;
$packAccess   = 'NONE';
$dataSource   = '';
$ashData        = [];   // [{sample_bucket, category, cnt}]
$heatChargeData = [];   // [{day, hour, cnt}] — total ASH rows
$heatIoData     = [];   // [{day, hour, cnt}] — User I/O + System I/O rows
$heatLogData    = [];   // [{day, hour, cnt}] — log switches (V$LOG_HISTORY)

$conn = demo_oracle_oci_open($oraDb, $db, $ociError, '', 'history/ash');

if (!$conn) {
    $fetchError = $ociError
        ? ('ORA-' . $ociError['code'] . ': ' . $ociError['message'])
        : t('demo_oracle.connect_error');
} else {

    $ashRepo = new DemoOracleAshRepository();

    /*
     * Quelle source ASH ? La meme decision que partout ailleurs dans le
     * module, prise au meme endroit — DemoOracleAshSource. Le module complet
     * refait ici sa propre lecture de la licence ; la demonstration n'en a
     * qu'une, ce qui evite qu'elles divergent.
     */
    $src        = DemoOracleAshSource::resolve($conn, ($oraDb['conn_type'] ?? '') === 'cloud');
    $hasLicense = ($src['source'] !== '');
    $packAccess = $src['source'] === 'diag_pack' ? 'DIAGNOSTIC' : 'NONE';
    $useBash    = ($src['source'] === 'bash_snapper');

    if ($useBash) {
        $ashData        = DemoOracleBashSnapperRepository::fetchAshHourly($conn, $days);
        $heatChargeData = DemoOracleBashSnapperRepository::fetchHeatmapCharge($conn, $days);
        $heatIoData     = DemoOracleBashSnapperRepository::fetchHeatmapIo($conn, $days);
        $heatLogData    = $ashRepo->fetchHeatmapLogSwitches($conn, $days);
        $hasLicense     = true;
        $dataSource     = 'bash_snapper';
    } elseif ($hasLicense) {
        $ashData        = $ashRepo->fetchAshHourly($conn, $days);
        $heatChargeData = $ashRepo->fetchHeatmapCharge($conn, $days);
        $heatIoData     = $ashRepo->fetchHeatmapIo($conn, $days);
        $heatLogData    = $ashRepo->fetchHeatmapLogSwitches($conn, $days);
        $dataSource     = 'diag_pack';
    }

    oci_close($conn);
}

/* ── View ──────────────────────────────────────────────────────────────── */
View::display(__DIR__ . '/views/report/history.php', [
    'fetchError'     => $fetchError,
    'hasLicense'     => $hasLicense,
    'packAccess'     => $packAccess,
    'dataSource'     => $dataSource,
    'days'           => $days,
    'allDays'        => [1, 7, 30],
    'ashData'        => $ashData,
    'heatChargeData' => $heatChargeData,
    'heatIoData'     => $heatIoData,
    'heatLogData'    => $heatLogData,
    'oraDb'          => $oraDb,
    'settings'       => $settings,
]);
