/**
 * Demo Oracle — bouton « tester la connexion » du formulaire des bases.
 *
 * Pont : window.DemoOracleDatabases = { testUrl, csrf, dbId, i18n }.
 *
 * C'est le SEUL JavaScript du module qui poste, et il ne poste que vers
 * test_connection.php. Les rapports, eux, ne postent nulle part : leur code
 * d'ecriture a ete retire avec les gestionnaires serveur correspondants. Le
 * banc de test verifie les deux affirmations.
 */
(function () {
    'use strict';

    var cfg = window.DemoOracleDatabases || {};
    var btn = document.getElementById('demo-test-btn');
    var out = document.getElementById('demo-test-result');
    if (!btn || !out) return;

    function val(id) {
        var el = document.getElementById(id);
        return el ? el.value : '';
    }

    /** Une ligne de diagnostic : libelle, puis oui/non colore. */
    function line(label, ok, okTxt, koTxt) {
        return '<div style="display:flex;gap:.4rem;align-items:baseline">'
            + '<span style="color:var(--color-text-muted)">' + label + '</span>'
            + '<span style="color:' + (ok ? '#1a7f37' : '#9a6700') + '">'
            + (ok ? okTxt : koTxt) + '</span></div>';
    }

    btn.addEventListener('click', function () {
        out.innerHTML = '';
        out.textContent = cfg.i18n.testing;
        out.style.color = '';

        var fd = new FormData();
        var cloudRadio = document.getElementById('conn-cloud');
        var isCloud    = cloudRadio && cloudRadio.checked;

        fd.append('csrf_token',   cfg.csrf);
        fd.append('db_id',        cfg.dbId || 0);
        fd.append('conn_type',    isCloud ? 'cloud' : 'standard');
        fd.append('username',     val('username'));
        fd.append('password',     val('password'));

        if (isCloud) {
            // Le portefeuille n'est pas envoye : il est deja extrait sur le
            // serveur, et son chemin vient de la fiche.
            fd.append('tns_alias', val('tns_alias'));
        } else {
            fd.append('host',         val('host'));
            fd.append('port',         val('port'));
            fd.append('service_name', val('service_name'));
        }

        var sysdba = document.getElementById('sysdba');
        if (sysdba) fd.append('sysdba', sysdba.checked ? '1' : '0');

        btn.disabled = true;
        fetch(cfg.testUrl, { method: 'POST', body: fd, credentials: 'same-origin' })
            .then(function (r) { return r.json(); })
            .then(function (j) {
                out.style.color = '';
                if (!j.ok) {
                    out.textContent = '✗ ' + (j.msg || cfg.i18n.fail);
                    out.style.color = '#cf222e';
                    return;
                }
                var html = '<div style="color:#1a7f37;font-weight:600">✓ '
                         + (j.msg || '') + '</div>';
                if (j.banner) {
                    html += '<div style="font-size:.82rem;color:var(--color-text-muted)">'
                          + j.banner + '</div>';
                }
                if (j.diag) {
                    html += '<div style="margin-top:.35rem;font-size:.82rem;display:grid;gap:.1rem">'
                        + line(cfg.i18n.diagPack, j.diag.diag_pack,
                               cfg.i18n.licensed,  cfg.i18n.notLicensed)
                        + line(cfg.i18n.bashSnap, j.diag.bash_snapper,
                               cfg.i18n.installed, cfg.i18n.notInstalled)
                        + line(cfg.i18n.dbaRole,  j.diag.dba_role,
                               cfg.i18n.present,   cfg.i18n.absentReadOnly)
                        + '</div>';
                    // Sans licence ni paquetage, ni le temps reel ni
                    // l'historique n'auront de donnees a montrer.
                    if (!j.diag.diag_pack && !j.diag.bash_snapper) {
                        html += '<div style="margin-top:.3rem;font-size:.82rem;color:#9a6700">'
                              + '⚠ ' + cfg.i18n.noAshSource + '</div>';
                    }
                }
                out.innerHTML = html;
            })
            .catch(function () {
                out.textContent = '✗ ' + cfg.i18n.fail;
                out.style.color = '#cf222e';
            })
            .finally(function () { btn.disabled = false; });
    });
})();
