<?php
/**
 * Demo Oracle — rapport ASH detaille (section « history/detail »).
 *
 * Portage de la branche HTML de modules/oracle/_report_ash_detail.php. La
 * branche JSON, qui sert les tranches d'echantillons, vit dans
 * _data_history_detail.php : la page est rendue depuis layout.php, donc apres
 * l'envoi du <head>, et ne peut plus emettre de JSON.
 *
 * Deux plafonds, tous deux appliques cote serveur par
 * DemoOracleAshDetailFilters :
 *
 *   - amplitude limitee a DEMO_ORACLE_ASH_MAX_HOURS. Le debut demande est
 *     conserve, la fin ramenee ; la page le dit quand elle a rogne ;
 *   - deux dimensions servies sur huit — classe d'attente et module, le meme
 *     choix que le rapport temps reel. Les six autres restent dans la liste,
 *     desactivees.
 *
 * Le filtre de service est fige sur « tous les services », comme en temps reel.
 * Le filtre de classe d'attente est conserve : il resserre ce que la periode
 * montre deja, sans rien ouvrir de plus.
 *
 * Inclus par report.php. Variables : $oraDb, $db, $currentUser, $settings.
 */
require_once __DIR__ . '/lib/DemoOracleOciConnect.php';
require_once __DIR__ . '/lib/DemoOracleAshSource.php';
require_once __DIR__ . '/lib/DemoOracleAshDetailFilters.php';

$p          = DemoOracleAshDetailFilters::parsePeriod();
$dtBegin    = $p['begin'];
$dtEnd      = $p['end'];
$bucketSecs = DemoOracleAshDetailFilters::bucketSecs($dtBegin, $dtEnd);

/* ── Source ASH ──────────────────────────────────────────────────────────── */
$ociError   = null;
$fetchError = null;
$hasSource  = false;
$dataSource = '';

$conn = demo_oracle_oci_open($oraDb, $db, $ociError, '', 'history/detail');
if (!$conn) {
    $fetchError = $ociError
        ? ('ORA-' . $ociError['code'] . ': ' . $ociError['message'])
        : t('demo_oracle.connect_error');
} else {
    /*
     * Aucune donnee n'est lue ici : la page ne fait que resoudre la source et
     * poser le cadre. Les echantillons arrivent ensuite par tranches, depuis
     * _data_history_detail.php — c'est ce decoupage qui permet d'afficher une
     * longue periode sans une requete unique interminable.
     */
    $src        = DemoOracleAshSource::resolve($conn, ($oraDb['conn_type'] ?? '') === 'cloud');
    $dataSource = $src['source'];
    $hasSource  = ($src['source'] !== '');
    oci_close($conn);
}

/* ── Grille des intervalles, pour l'axe du temps ─────────────────────────── */
$startTs      = strtotime($dtBegin);
$endTs        = strtotime($dtEnd);
$alignedStart = intdiv($startTs, $bucketSecs) * $bucketSecs;
$allBuckets   = [];
for ($t = $alignedStart; $t < $endTs; $t += $bucketSecs) {
    $allBuckets[] = date('Y-m-d H:i:s', $t);
}

View::display(__DIR__ . '/views/report/ash_detail.php', [
    'fetchError' => $fetchError,
    'hasSource'  => $hasSource,
    'dataSource' => $dataSource,
    'dtBegin'    => $dtBegin,
    'dtEnd'      => $dtEnd,
    'clamped'    => $p['clamped'],
    'maxHours'   => DEMO_ORACLE_ASH_MAX_HOURS,
    'bucketSecs' => $bucketSecs,
    'allBuckets' => $allBuckets,
    'dimensions' => DemoOracleAshDetailFilters::dimensions(),
    'dim'        => DemoOracleAshDetailFilters::dimension(),
    'baseUrl'    => demo_oracle_url('report', ['section' => 'history/detail']),
    'cdnD3Js'    => $settings->get('cdn_d3_js', ''),
]);
