// =============================================================
// Solar Net Hub — app.js
// Bridge JS ↔ Python y lógica de UI
// =============================================================

// ── Bridge JS → Python ────────────────────────────────────────
function send(action) {
    window.webkit.messageHandlers.bridge.postMessage(
        JSON.stringify({ action })
    );
}

// ── Tabs ──────────────────────────────────────────────────────
function switchTab(name) {
    document.querySelectorAll('.tab-panel').forEach(el => el.classList.remove('active'));
    document.querySelectorAll('.tabBtn').forEach(el => el.classList.remove('active'));
    const panel = document.getElementById('tab-' + name);
    const btn   = document.querySelector('[data-tab="' + name + '"]');
    if (panel) panel.classList.add('active');
    if (btn)   btn.classList.add('active');
}

// ── Actualizar estado (llamado desde Python) ──────────────────
function updateStatus(data) {
    // --- OASIS ---
    const oCard = document.getElementById('oasisCard');
    const state = data.oasis_running   ? 'running'
                : data.oasis_installed ? 'stopped'
                :                        'unknown';

    oCard.dataset.state = state;

    if (data.oasis_running) {
        document.getElementById('oasisState').textContent = 'ACTIVO';
        document.getElementById('oasisSub').textContent   = 'servidor corriendo en puerto 3000';
        _btn('btnStart',   true);
        _btn('btnStop',    false);
        _btn('btnInstall', true);
        _btn('btnBrowser', false);
    } else if (data.oasis_installed) {
        document.getElementById('oasisState').textContent = 'INSTALADO';
        document.getElementById('oasisSub').textContent   = 'servidor detenido';
        _btn('btnStart',   false);
        _btn('btnStop',    true);
        _btn('btnInstall', true);
        _btn('btnBrowser', true);
    } else {
        document.getElementById('oasisState').textContent = 'NO INSTALADO';
        document.getElementById('oasisSub').textContent   = 'instala OASIS para comenzar';
        _btn('btnStart',   true);
        _btn('btnStop',    true);
        _btn('btnInstall', false);
        _btn('btnBrowser', true);
    }

    document.getElementById('iVer').textContent  = data.oasis_version ? 'v' + data.oasis_version : '—';
    document.getElementById('iNode').textContent = data.node_version  || '—';
    document.getElementById('iDir').textContent  = data.oasis_dir     || '—';

    // Global dot
    document.getElementById('globalDot').dataset.state = state;

    // --- ECOIN ---
    const eCard  = document.getElementById('ecoinCard');
    const estate = data.ecoin_installed ? 'running' : 'unknown';
    eCard.dataset.state = estate;

    if (data.ecoin_installed) {
        document.getElementById('ecoinState').textContent = 'COMPILADO';
        document.getElementById('ecoinSub').textContent   = 'wallet ECOIN disponible';
        _btn('btnEGui',     false);
        _btn('btnEWallet',  false);
        _btn('btnEConnect', false);
    } else {
        document.getElementById('ecoinState').textContent = 'NO INSTALADO';
        document.getElementById('ecoinSub').textContent   = 'instala ECOIN para comenzar';
        _btn('btnEGui',     true);
        _btn('btnEWallet',  true);
        _btn('btnEConnect', true);
    }

    document.getElementById('eWallet').textContent = data.ecoin_wallet  ? 'Si' : 'No';
    document.getElementById('eQt').textContent     = data.ecoin_qt      ? 'Si' : 'No';
    document.getElementById('eDaemon').textContent = data.ecoin_daemon   ? 'Si' : 'No';
}

// ── Log (llamado desde Python) ────────────────────────────────
function appendLog(text) {
    const area = document.getElementById('logArea');
    const div  = document.createElement('div');
    div.className = 'log-line';

    if (text.startsWith('$'))           div.classList.add('cmd');
    else if (text.startsWith('──'))     div.classList.add('end');
    else if (text.startsWith('[Error')) div.classList.add('error');

    div.textContent = text;
    area.appendChild(div);
    area.scrollTop = area.scrollHeight;
}

function clearLog() {
    document.getElementById('logArea').innerHTML = '';
}

// ── Helper: deshabilitar/habilitar botón ──────────────────────
function _btn(id, disabled) {
    const el = document.getElementById(id);
    if (el) el.disabled = disabled;
}
