<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>dstat.ethernal.vip - Layer 4 & Layer 7 Dstat</title>
    <link rel="icon" type="image/x-icon" href="/dstat.png">
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-date-fns"></script>
    
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Inter', sans-serif;
            background: #000000;
            color: #FFD700;
        }

        .dashboard-container {
            max-width: 1440px;
            margin: 0 auto;
            padding: 2rem;
        }

        .header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 2rem;
            padding: 1rem 0;
            border-bottom: 1px solid #FF0000;
            text-shadow: 0 0 10px #FFD700;
        }

        .header h1 {
            cursor: pointer;
            transition: opacity 0.2s;
            color: #FFD700;
        }

        .header h1:hover {
            opacity: 0.8;
            text-shadow: 0 0 20px #FFD700;
        }

        .server-selection {
            display: flex;
            gap: 1rem;
        }

        .dropdown {
            position: relative;
        }

        .dropdown-btn {
            background: #1a0000;
            color: #FFD700;
            padding: 0.75rem 1.5rem;
            border: 1px solid #FF0000;
            border-radius: 0.5rem;
            cursor: pointer;
            display: flex;
            align-items: center;
            gap: 0.5rem;
            font-size: 0.9rem;
            transition: all 0.2s;
            text-shadow: 0 0 5px #FFD700;
        }

        .dropdown-btn:hover {
            background: #2d0000;
            box-shadow: 0 0 15px #FF0000;
        }

        .dropdown-content {
            display: none;
            position: absolute;
            top: 100%;
            right: 0;
            background: #1a0000;
            min-width: 280px;
            max-height: 400px;
            border-radius: 0.5rem;
            box-shadow: 0 0 15px rgba(255, 0, 0, 0.3);
            z-index: 1000;
            margin-top: 0.5rem;
            border: 1px solid #FF0000;
            overflow-y: auto;
        }

        .category {
            padding: 0.5rem;
            border-bottom: 1px solid #FF0000;
        }

        .category h3 {
            color: #FFD700;
            font-size: 0.85rem;
            margin-bottom: 0.5rem;
            text-shadow: 0 0 5px #FFD700;
            padding: 0 0.5rem;
        }

        .server-item {
            display: flex;
            align-items: center;
            padding: 0.6rem;
            color: #FFD700;
            text-decoration: none;
            transition: background 0.2s;
            border-bottom: 1px solid rgba(255, 0, 0, 0.2);
            font-size: 0.9rem;
        }

        .server-item:last-child {
            border-bottom: none;
        }

        .server-item:hover {
            background: #2d0000;
            text-shadow: 0 0 10px #FFD700;
        }

        .server-item img {
            width: 20px;
            height: 20px;
            margin-right: 10px;
        }

        .server-stat {
            margin-left: auto;
            color: #FFD700;
        }

        .graph-container {
            background: #1a0000;
            padding: 1.5rem;
            border-radius: 1rem;
            height: 400px;
            position: relative;
            border: 1px solid #FF0000;
            box-shadow: 0 0 20px rgba(255, 0, 0, 0.2);
        }

        .stats-panel {
            background: #1a0000;
            padding: 1rem;
            border-radius: 1rem;
            height: fit-content;
            border: 1px solid #FF0000;
            box-shadow: 0 0 20px rgba(255, 0, 0, 0.2);
        }

        .main-content {
            display: flex;
            flex-direction: column;
            gap: 1rem;
        }

        .stat-item {
            margin-bottom: 0.75rem;
        }

        .stat-label {
            font-size: 0.8rem;
            color: #FFD700;
            margin-bottom: 0.25rem;
            text-shadow: 0 0 5px #FFD700;
        }

        .stat-value {
            display: flex;
            align-items: center;
            gap: 0.5rem;
            color: #FFD700;
        }

        .copy-button {
            background: transparent;
            border: none;
            color: #FFD700;
            cursor: pointer;
            padding: 0.25rem;
            border-radius: 0.25rem;
            transition: all 0.2s;
        }

        .copy-button:hover {
            background: rgba(255, 215, 0, 0.1);
            text-shadow: 0 0 10px #FFD700;
        }

        .graph-container::before {
            content: 'ETHERNAL';
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            font-size: 8rem;
            font-weight: bold;
            opacity: 0.2;
            color: #00e1ff;
            z-index: 1;
        }

        #chart-container {
            width: 100%;
            height: 100%;
            position: relative;
            z-index: 2;
        }

        @media (max-width: 1024px) {
            .graph-container::before {
                font-size: 4rem;
            }
        }

        .dropdown-content::-webkit-scrollbar {
            width: 6px;
        }

        .dropdown-content::-webkit-scrollbar-track {
            background: #1a0000;
            border-radius: 3px;
        }

        .dropdown-content::-webkit-scrollbar-thumb {
            background: #FF0000;
            border-radius: 3px;
        }

        .dropdown-content::-webkit-scrollbar-thumb:hover {
            background: #FF4444;
        }
    </style>
</head>
<body>
    <div class="dashboard-container">
        <header class="header">
            <h1 onclick="window.location.href='/'">dstat.ethernal.vip</h1>
            <div class="server-selection">
                <div class="dropdown">
                    <button class="dropdown-btn" onclick="toggleDropdown('layer4')">
                        <i class="fas fa-chart-line"></i> Layer 4
                    </button>
                    <div id="layer4" class="dropdown-content">
                        <?php foreach ($servers['layer4'] as $categoryId => $category): ?>
                            <div class="category">
                                <h3><?= htmlspecialchars($category['category_name']) ?></h3>
                                <?php foreach ($category['servers'] as $serverId => $serverDetails): ?>
                                    <a href="/l4/?id=<?= $serverId ?>" class="server-item">
                                        <img src="<?= $serverDetails['flag'] ?>" alt="Flag">
                                        <span><?= htmlspecialchars($serverDetails['name']) ?></span>
                                        <span class="server-stat"><?= htmlspecialchars($serverDetails['number']) ?></span>
                                    </a>
                                <?php endforeach; ?>
                            </div>
                        <?php endforeach; ?>
                    </div>
                </div>
                
                <div class="dropdown">
                    <button class="dropdown-btn" onclick="toggleDropdown('layer7')">
                        <i class="fas fa-chart-line"></i> Layer 7
                    </button>
                    <div id="layer7" class="dropdown-content">
                        <?php foreach ($servers['layer7'] as $categoryId => $category): ?>
                            <div class="category">
                                <h3><?= htmlspecialchars($category['category_name']) ?></h3>
                                <?php foreach ($category['servers'] as $serverId => $serverDetails): ?>
                                    <a href="/l7/?id=<?= $serverId ?>" class="server-item">
                                        <img src="<?= $serverDetails['flag'] ?>" alt="Flag">
                                        <span><?= htmlspecialchars($serverDetails['name']) ?></span>
                                        <span class="server-stat"><?= htmlspecialchars($serverDetails['number']) ?></span>
                                    </a>
                                <?php endforeach; ?>
                            </div>
                        <?php endforeach; ?>
                    </div>
                </div>
            </div>
        </header>

        <main class="main-content">
            <div class="graph-container">
                <div id="chart-container"></div>
            </div>
            
            <div class="stats-panel">
                <div class="stat-item">
                    <div class="stat-label">Server Name</div>
                    <div class="stat-value"><?= htmlspecialchars($server['name'] ?? 'Unknown') ?></div>
                </div>
                <div class="stat-item">
                    <div class="stat-label">URL</div>
                    <div class="stat-value">
                        <span><?= htmlspecialchars($server['url'] ?? 'Unknown') ?></span>
                        <button class="copy-button" onclick="copyToClipboard('<?= htmlspecialchars($server['url'] ?? '') ?>')">
                            <i class="fas fa-copy"></i>
                        </button>
                    </div>
                </div>
                <?php if ($layer === 'layer4'): ?>
                <div class="stat-item">
                    <div class="stat-label">Ports</div>
                    <div class="stat-value"><?= htmlspecialchars($server['ports'] ?? 'N/A') ?></div>
                </div>
                <?php endif; ?>
                <div class="stat-item">
                    <div class="stat-label"><?= ($layer === 'layer7' ? 'Requests' : 'Bandwidth') ?></div>
                    <div class="stat-value"><?= htmlspecialchars($server['detalis-number'] ?? 'Unknown') ?></div>
                </div>
            </div>
        </main>
    </div>

    <script>
        function toggleDropdown(id) {
            const dropdown = document.getElementById(id);
            const allDropdowns = document.querySelectorAll('.dropdown-content');
            
            allDropdowns.forEach(d => {
                if (d.id !== id) d.style.display = 'none';
            });
            
            dropdown.style.display = dropdown.style.display === 'block' ? 'none' : 'block';
        }

        document.addEventListener('click', function(event) {
            if (!event.target.closest('.dropdown')) {
                document.querySelectorAll('.dropdown-content').forEach(d => {
                    d.style.display = 'none';
                });
            }
        });

        function copyToClipboard(text) {
            const tempInput = document.createElement('input');
            tempInput.value = text;
            document.body.appendChild(tempInput);
            tempInput.select();
            document.execCommand('copy');
            document.body.removeChild(tempInput);
            
            const copyIcon = document.querySelector('.copy-button i');
            copyIcon.classList.replace('fa-copy', 'fa-check');
            setTimeout(() => {
                copyIcon.classList.replace('fa-check', 'fa-copy');
            }, 1500);
        }

        document.addEventListener("DOMContentLoaded", function () {
            let chart;

            function formatValue(value) {
                if (value === 0) return { value: '0', unit: 'Gbps' };
                return { value: (value / 1000000).toFixed(2), unit: 'Gbps' };
            }

            function formatPPS(value) {
                if (value >= 1e6) return { value: (value / 1e6).toFixed(2), unit: 'Mpps' };
                if (value >= 1e3) return { value: (value / 1e3).toFixed(2), unit: 'Kpps' };
                return { value: value.toFixed(2), unit: 'pps' };
            }

            function createChart(containerId) {
                const ctx = document.createElement('canvas');
                document.getElementById(containerId).appendChild(ctx);
                const context = ctx.getContext('2d');

                const gradientBandwidth = context.createLinearGradient(0, 0, 0, 400);
                gradientBandwidth.addColorStop(0, 'rgba(255, 215, 0, 0.5)');
                gradientBandwidth.addColorStop(1, 'rgba(255, 215, 0, 0)');

                const gradientPackets = context.createLinearGradient(0, 0, 0, 400);
                gradientPackets.addColorStop(0, 'rgba(255, 215, 0, 0.3)');
                gradientPackets.addColorStop(1, 'rgba(255, 215, 0, 0)');

                return new Chart(ctx, {
                    type: 'line',
                    data: {
                        datasets: [{
                            label: 'Bandwidth',
                            data: [],
                            borderColor: '#FFD700',
                            backgroundColor: gradientBandwidth,
                            fill: true,
                            tension: 0.4,
                            borderWidth: 3,
                            pointRadius: 0,
                            cubicInterpolationMode: 'monotone',
                            borderGlow: true
                        }, {
                            label: 'Packets',
                            data: [],
                            borderColor: '#FFED4A',
                            backgroundColor: gradientPackets,
                            fill: true,
                            tension: 0.4,
                            borderWidth: 3,
                            pointRadius: 0,
                            cubicInterpolationMode: 'monotone',
                            borderGlow: true
                        }]
                    },
                    options: {
                        responsive: true,
                        maintainAspectRatio: false,
                        animation: {
                            duration: 1500,
                            easing: 'easeInOutQuart'
                        },
                        scales: {
                            x: {
                                type: 'time',
                                time: { unit: 'second' },
                                grid: { 
                                    color: 'rgba(255, 215, 0, 0.1)',
                                    borderColor: '#FFD700'
                                },
                                ticks: { 
                                    color: '#FFD700'
                                }
                            },
                            y: {
                                beginAtZero: true,
                                grid: { 
                                    color: 'rgba(255, 215, 0, 0.1)',
                                    borderColor: '#FFD700'
                                },
                                ticks: {
                                    color: '#FFD700',
                                    callback: function(value) {
                                        if (value === 0) return '0';
                                        const formatted = formatValue(value);
                                        return formatted.value + ' ' + formatted.unit;
                                    }
                                }
                            }
                        },
                        plugins: {
                            legend: {
                                labels: {
                                    color: '#FFD700'
                                }
                            },
                            tooltip: {
                                backgroundColor: '#1a0000',
                                borderColor: '#FFD700',
                                borderWidth: 1,
                                titleColor: '#FFD700',
                                bodyColor: '#FFD700',
                                displayColors: false,
                                callbacks: {
                                    label: function(context) {
                                        if (context.dataset.label === 'Bandwidth') {
                                            const formatted = formatValue(context.raw.y);
                                            return `Bandwidth: ${formatted.value} ${formatted.unit}`;
                                        } else {
                                            const formatted = formatPPS(context.raw.y);
                                            return `Packets: ${formatted.value} ${formatted.unit}`;
                                        }
                                    }
                                }
                            }
                        }
                    }
                });
            }

            function parseNetdata() {
                fetch("<?php echo htmlspecialchars($server['dataUrl']); ?>", {
                    cache: "no-store"
                })
                .then(response => response.json())
                .then(data => {
                    const now = Date.now();
                    const bps = data.bandwidth.map((value, index) => ({
                        x: now - index * 1000,
                        y: Math.max(0, value)
                    }));
                    
                    const pps = data.packets.map((value, index) => ({
                        x: now - index * 1000,
                        y: Math.max(0, value)
                    }));

                    chart.data.datasets[0].data = bps;
                    chart.data.datasets[1].data = pps;
                    
                    chart.update('active');
                })
                .finally(() => {
                    requestAnimationFrame(() => setTimeout(parseNetdata, 1000));
                });
            }

            chart = createChart("chart-container");
            parseNetdata();
        });
    </script>
</body>
</html>
