<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>φ-CODE GENERATOR | DASHBOARD</title>
    <style>
        :root {
            --phi-gold: #c5a059;
            --phi-blue: #00f2ff;
            --bg-dark: #0a0a0c;
            --panel-bg: #141418;
        }

        body {
            background-color: var(--bg-dark);
            color: #e0e0e0;
            font-family: 'Courier New', Courier, monospace;
            margin: 0;
            padding: 20px;
            display: grid;
            grid-template-columns: 350px 1fr;
            gap: 20px;
        }

        /* Stats Panel */
        .sidebar {
            background: var(--panel-bg);
            border: 1px solid var(--phi-gold);
            padding: 20px;
            box-shadow: 0 0 15px rgba(197, 160, 89, 0.2);
        }

        .stat-box {
            margin-bottom: 20px;
            border-left: 3px solid var(--phi-blue);
            padding-left: 10px;
        }

        .stat-value {
            color: var(--phi-blue);
            font-size: 1.2rem;
            font-weight: bold;
        }

        /* Main Console */
        .main-content {
            display: flex;
            flex-direction: column;
            gap: 20px;
        }

        .terminal {
            background: black;
            border: 1px solid #333;
            padding: 20px;
            height: 400px;
            overflow-y: auto;
            position: relative;
        }

        textarea {
            width: 100%;
            height: 100px;
            background: #1a1a1e;
            color: var(--phi-blue);
            border: 1px solid #444;
            padding: 10px;
            box-sizing: border-box;
            resize: none;
        }

        button {
            background: var(--phi-gold);
            color: black;
            border: none;
            padding: 10px 20px;
            cursor: pointer;
            font-weight: bold;
            text-transform: uppercase;
        }

        button:hover { background: #dfb870; }

        .phi-resonance {
            color: var(--phi-gold);
            font-style: italic;
        }

        pre { white-space: pre-wrap; word-wrap: break-word; }
    </style>
</head>
<body>

    <div class="sidebar">
        <h2 style="color:var(--phi-gold)">φ-GEN STATS</h2>
        <hr border="1" color="#333">
        <div id="stats-container">
            <p>Initializing connection...</p>
        </div>
        <div class="stat-box">
            <div>PHI SEAL</div>
            <div class="stat-value">4721424167835376.0</div>
        </div>
    </div>

    <div class="main-content">
        <div class="input-area">
            <h3>LOGIC GENERATION PROMPT</h3>
            <textarea id="promptInput" placeholder="e.g. Create a maze solver using BFS..."></textarea>
            <div style="margin-top:10px">
                <button onclick="generateCode()">Execute Generation</button>
                <button onclick="analyzePrompt()" style="background:#444; color:white;">Analyze Only</button>
            </div>
        </div>

        <div class="terminal" id="console">
            <div class="phi-resonance">> System Ready. Waiting for input...</div>
        </div>
    </div>

    <script>
        const API_BASE = "http://localhost:5000";

        async function updateStats() {
            try {
                const res = await fetch(`${API_BASE}/stats`);
                const data = await res.json();
                const kb = data.knowledge_base;
                document.getElementById('stats-container').innerHTML = `
                    <div class="stat-box">
                        <div>TOTAL PATTERNS</div>
                        <div class="stat-value">${kb.total_patterns}</div>
                    </div>
                    <div class="stat-box">
                        <div>LEARNED</div>
                        <div class="stat-value">${kb.learned_patterns}</div>
                    </div>
                `;
            } catch (e) { console.error("Stats offline"); }
        }

        async function generateCode() {
            const desc = document.getElementById('promptInput').value;
            const consoleBox = document.getElementById('console');
            
            logToConsole(`> Generating code for: ${desc.substring(0, 30)}...`, 'phi-resonance');

            try {
                const res = await fetch(`${API_BASE}/generate`, {
                    method: 'POST',
                    headers: {'Content-Type': 'application/json'},
                    body: JSON.stringify({ description: desc, language: 'python' })
                });
                const data = await res.json();
                
                logToConsole(`CODE GENERATED [Seal: ${data.metadata.phi_seal}]`, 'phi-blue');
                logToConsole(`<pre>${data.code}</pre>`);
                updateStats();
            } catch (e) {
                logToConsole(`ERROR: Could not connect to PHI API.`, 'red');
            }
        }

        function logToConsole(msg, className = '') {
            const div = document.createElement('div');
            if (className) div.classList.add(className);
            div.innerHTML = msg;
            document.getElementById('console').appendChild(div);
            document.getElementById('console').scrollTop = document.getElementById('console').scrollHeight;
        }

        // Auto-refresh stats every 10s
        setInterval(updateStats, 10000);
        updateStats();
    </script>
</body>
</html>