<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Planalto Vip Signal Generator</title>
    <script src="https://cdn.tailwindcss.com"></script>
    <style>
        .currency-grid {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
            gap: 0.5rem;
        }
        .animate-pulse {
            animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
        }
        @keyframes pulse {
            0%, 100% { opacity: 1; }
            50% { opacity: .5; }
        }
        .transition-all {
            transition: all 0.3s ease;
        }
    </style>
</head>
<body class="min-h-screen bg-gray-50">
    <div class="max-w-7xl mx-auto px-4 py-12">
        <div class="bg-white rounded-xl shadow-lg p-6 md:p-8">
            <!-- Header -->
            <div class="flex items-center justify-center gap-3 mb-8">
                <svg xmlns="http://www.w3.org/2000/svg" class="w-8 h-8 text-blue-600" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
                    <path d="M22 12h-4l-3 9L9 3l-3 9H2"/>
                </svg>
                <h1 class="text-3xl font-bold text-gray-900">
                    Magic Trading Signals OTC
                </h1>
            </div>

            <!-- Currency Selector -->
            <div class="space-y-6">
                <div>
                    <h2 class="text-xl font-semibold mb-4">Select Currency Pairs</h2>
                    <div id="currencyGrid" class="currency-grid"></div>
                </div>

                <!-- Generate Button -->
                <div class="flex justify-center">
                    <button
                        id="generateBtn"
                        class="px-8 py-3 rounded-lg text-white font-medium bg-blue-600 hover:bg-blue-700 transition-all transform hover:scale-105"
                    >
                        Get Signals
                    </button>
                </div>

                <!-- Error Display -->
                <div id="errorDisplay" class="p-4 bg-red-50 text-red-700 rounded-lg hidden"></div>

                <!-- Signals Display -->
                <div id="signalsDisplay" class="hidden">
                    <div class="bg-white rounded-lg shadow-lg p-6 mt-6">
                        <h3 class="text-xl font-semibold mb-4">I Hope All The Best For You</h3>
                        <p id="timeRange" class="text-gray-600 mb-4"></p>
                        <div id="signalsList" class="space-y-2"></div>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <script>
        const currencyPairs = [
            "GBPCAD_otc", "AUDCHF_otc", "USDCAD_otc", "EURAUD_otc", "GBPUSD_otc",
            "USDJPY_otc", "EURCAD_otc", "EURJPY_otc", "EURUSD_otc", "GBPCHF_otc",
            "AUDJPY_otc", "AUDCAD_otc", "GBPAUD_otc", "NZDUSD_otc", "USDCHF_otc",
            "EURNZD_otc", "CADCHF_otc", "EURCHF_otc", "GBPJPY_otc", "CADJPY_otc",
            "NZDJPY_otc", "AUDUSD_otc", "AUDNZD_otc", "EURGBP_otc", "USDINR_otc",
            "CHFJPY_otc", "NZDCHF_otc", "NZDUSD_otc", "BRLUSD_otc", "USDDZD_otc",
            "USDIDR_otc", "USDPKR_otc", "USDTRY_otc", "USDNGN_otc", "USDCOP_otc",
            "USDBDT_otc", "USDEGP_otc", "USDARS_otc", "USDMXN_otc"
        ];

        // Utility functions
        const padZero = (num) => num.toString().padStart(2, '0');
        const formatDateTime = (date) => `${padZero(date.getHours())}:${padZero(date.getMinutes())}`;
        
        const convertToUTC6 = (date) => {
            const utc6Offset = 6 * 60;
            const localOffset = date.getTimezoneOffset();
            return new Date(date.getTime() + (utc6Offset + localOffset) * 60000);
        };

        const convertFromUTC6ToLocal = (dateString) => {
            const [hours, minutes] = dateString.split(':').map(Number);
            const utc6Date = new Date();
            utc6Date.setUTCHours(hours, minutes, 0, 0);
            utc6Date.setUTCHours(utc6Date.getUTCHours() - 6);
            return formatDateTime(new Date(utc6Date));
        };

        // State management
        let selectedPairs = new Set();

        // DOM Elements
        const currencyGrid = document.getElementById('currencyGrid');
        const generateBtn = document.getElementById('generateBtn');
        const errorDisplay = document.getElementById('errorDisplay');
        const signalsDisplay = document.getElementById('signalsDisplay');
        const timeRange = document.getElementById('timeRange');
        const signalsList = document.getElementById('signalsList');

        // Initialize currency grid
        currencyPairs.forEach(pair => {
            const button = document.createElement('button');
            const displayName = pair.replace('_otc', '');
            button.textContent = displayName;
            button.className = `p-2 rounded-lg text-sm transition-all bg-gray-100 text-gray-700 hover:bg-gray-200`;
            button.onclick = () => {
                if (selectedPairs.has(pair)) {
                    selectedPairs.delete(pair);
                    button.className = `p-2 rounded-lg text-sm transition-all bg-gray-100 text-gray-700 hover:bg-gray-200`;
                } else {
                    selectedPairs.add(pair);
                    button.className = `p-2 rounded-lg text-sm transition-all bg-blue-600 text-white`;
                }
            };
            currencyGrid.appendChild(button);
        });

        // Generate signals
        generateBtn.onclick = async () => {
            if (selectedPairs.size === 0) {
                errorDisplay.textContent = 'Please select at least one currency pair';
                errorDisplay.classList.remove('hidden');
                return;
            }

            // Reset displays
            errorDisplay.classList.add('hidden');
            generateBtn.disabled = true;
            generateBtn.textContent = 'Waiting...';
            generateBtn.className = 'px-8 py-3 rounded-lg text-white font-medium bg-gray-400 cursor-not-allowed';

            const now = new Date();
            const end = new Date(now.getTime() + 2 * 60 * 60 * 1000);
            const startUTC6 = convertToUTC6(now);
            const endUTC6 = convertToUTC6(end);

            const params = new URLSearchParams({
                start: formatDateTime(startUTC6),
                end: formatDateTime(endUTC6),
                duration: '8',
                currency_pairs: Array.from(selectedPairs).join(','),
                operation_mode: 'normal',
                percentage_min: '80',
                apply_filter: '1',
                is_separate: '0',
                backtest_advanced: 'off'
            });

            try {
                const response = await fetch(
                    `https://alltradingapi.com/signal_list_gen_vip/qx_api?${params}`
                );
                
                if (!response.ok) {
                    throw new Error('Failed to fetch signals');
                }

                const data = await response.json();
                
                if (data.error) {
                    throw new Error(data.error);
                }



                // Clear and update signals list
                signalsList.innerHTML = '';
                data.signals.forEach(signal => {
                    const localTime = convertFromUTC6ToLocal(signal.entrada);
                    const signalElement = document.createElement('div');
                    signalElement.className = 'font-mono';
                    const direction = signal.direcao_principal.toUpperCase();
                    const colorClass = direction === 'CALL' ? 'text-green-600' : 'text-red-600';
                    signalElement.innerHTML = `
                        <span>${localTime}:00</span>|
                        <span>${signal.ativos}</span>|
                        <span class="${colorClass}">${direction}</span>|
                        <span>1 MIN</span>
                    `;
                    signalsList.appendChild(signalElement);
                });

                signalsDisplay.classList.remove('hidden');
            } catch (err) {
                errorDisplay.textContent = err.message;
                errorDisplay.classList.remove('hidden');
            } finally {
                generateBtn.disabled = false;
                generateBtn.textContent = 'Get Signals';
                generateBtn.className = 'px-8 py-3 rounded-lg text-white font-medium bg-blue-600 hover:bg-blue-700 transition-all transform hover:scale-105';
            }
        };
    </script>
</body>
</html>