<?php
/**
 * Demo Oracle — le mecanisme « disponible en version complete ».
 *
 * Tout ce que la demonstration retire passe par ici, et par ici seulement :
 * un seul endroit decide de l'apparence et du libelle, un seul endroit porte
 * le lien de contact. Dupliquer ces balises dans vingt rapports aurait garanti
 * qu'ils divergent.
 *
 * Deux formes seulement :
 *   - `badge()`   pour un controle desactive au milieu d'un rapport,
 *   - `page()`    pour un rapport entierement absent de la demonstration.
 *
 * REGLE IMPERATIVE : griser un bouton ne protege rien. Toute action retiree
 * doit l'etre AUSSI cote serveur — le module de demonstration n'embarque tout
 * simplement pas les gestionnaires d'action correspondants. L'interface dit ce
 * qui manque ; le serveur, lui, ne sait pas le faire.
 *
 * Safe to include multiple times (guard sur class_exists).
 */
if (class_exists('DemoOracleDemo')) return;

class DemoOracleDemo
{
    /**
     * URL « en savoir plus », posee dans la configuration du module.
     * Vide = mention seule, sans lien : la demonstration reste utilisable
     * chez quelqu'un qui ne veut pas de renvoi commercial.
     */
    public static function moreUrl(): string
    {
        if (!class_exists('Module')) return '';
        try {
            $cfg = Module::getInstance()->getConfig('demo_oracle');
        } catch (Throwable $e) {
            return '';
        }
        return trim((string)($cfg['full_version_url'] ?? ''));
    }

    /** Le lien « En savoir plus », ou une chaine vide si aucune URL n'est posee. */
    private static function moreLink(): string
    {
        $url = self::moreUrl();
        if ($url === '') return '';
        return ' <a href="' . htmlspecialchars($url, ENT_QUOTES) . '" target="_blank" rel="noopener"'
             . ' style="color:inherit;text-decoration:underline">'
             . htmlspecialchars(t('demo_oracle.full_more')) . '</a>';
    }

    /**
     * Pastille a poser a cote d'un controle desactive.
     *
     * @param string $extra Precision facultative (ex. « pour les profils DBA »)
     */
    public static function badge(string $extra = ''): string
    {
        $txt = htmlspecialchars(t('demo_oracle.full_only'));
        if ($extra !== '') $txt .= ' ' . htmlspecialchars($extra);

        return '<span style="display:inline-flex;align-items:center;gap:.3rem;'
             . 'font-size:.78rem;padding:.1rem .45rem;border-radius:999px;'
             . 'background:#fef9c3;color:#854d0e;white-space:nowrap" role="note">'
             . '&#9432; ' . $txt . self::moreLink() . '</span>';
    }

    /**
     * Attributs a coller sur un controle que la demonstration desactive.
     * Le `title` porte la meme phrase que la pastille : au survol comme a la
     * lecture, le visiteur obtient la meme reponse.
     */
    public static function disabled(string $extra = ''): string
    {
        $txt = t('demo_oracle.full_only') . ($extra !== '' ? ' ' . $extra : '');
        return ' disabled aria-disabled="true" title="' . htmlspecialchars($txt, ENT_QUOTES) . '"';
    }

    /**
     * Corps d'un rapport absent de la demonstration.
     * Rend un encadre complet : titre, explication, et le lien s'il existe.
     */
    public static function page(string $title, string $detail = ''): string
    {
        $url  = self::moreUrl();
        $html = '<div class="card" style="text-align:center;padding:2.5rem 1.5rem">'
              . '<div style="font-size:2rem;line-height:1;margin-bottom:.75rem">&#128274;</div>'
              . '<h2 style="margin:0 0 .5rem;font-size:1.15rem">'
              . htmlspecialchars($title) . '</h2>'
              . '<p style="margin:0 auto;max-width:34rem;color:var(--color-text-muted)">'
              . htmlspecialchars(t('demo_oracle.full_page_intro'));

        if ($detail !== '') {
            $html .= '<br><br>' . htmlspecialchars($detail);
        }
        $html .= '</p>';

        if ($url !== '') {
            $html .= '<p style="margin:1.25rem 0 0">'
                   . '<a href="' . htmlspecialchars($url, ENT_QUOTES) . '" target="_blank" rel="noopener"'
                   . ' class="btn btn-primary">'
                   . htmlspecialchars(t('demo_oracle.full_more')) . '</a></p>';
        }
        return $html . '</div>';
    }
}
