<?php
$pageTitle = 'Global Weather - Worldwide Weather Updates';
$pageDescription = 'Live weather updates from major cities around the world. View weather extremes, continental overviews, and real-time conditions across the globe.';

include 'header.php';
?>

<div class="global-weather-page">
    <div class="page-header">
        <h1 data-translate="globalWeather">Global Weather</h1>
        <p data-translate="globalWeatherDesc">Live weather updates from cities around the world</p>
        <div class="last-updated">
            <span data-translate="lastUpdated">Last updated:</span> <span id="globalLastUpdated">--</span>
            <button class="refresh-btn" id="refreshGlobalWeather" title="Refresh">&#8635;</button>
        </div>
    </div>

    <div class="weather-ticker-container">
        <div class="ticker-label">&#127760; <span data-translate="liveWeather">Live Weather</span></div>
        <div class="weather-ticker" id="weatherTicker">
            <div class="ticker-content" id="tickerContent"></div>
        </div>
    </div>

    <section class="extremes-section card">
        <h2><span class="section-icon">&#127777;</span> <span data-translate="weatherExtremes">Weather Extremes Right Now</span></h2>
        <div class="extremes-grid" id="extremesGrid">
            <div class="extreme-card hottest">
                <div class="extreme-icon">&#128293;</div>
                <div class="extreme-label" data-translate="hottest">Hottest</div>
                <div class="extreme-city" id="hottestCity">--</div>
                <div class="extreme-value" id="hottestTemp">--°C</div>
            </div>
            <div class="extreme-card coldest">
                <div class="extreme-icon">&#10052;</div>
                <div class="extreme-label" data-translate="coldest">Coldest</div>
                <div class="extreme-city" id="coldestCity">--</div>
                <div class="extreme-value" id="coldestTemp">--°C</div>
            </div>
            <div class="extreme-card wettest">
                <div class="extreme-icon">&#127783;</div>
                <div class="extreme-label" data-translate="wettest">Wettest</div>
                <div class="extreme-city" id="wettestCity">--</div>
                <div class="extreme-value" id="wettestPrecip">-- mm</div>
            </div>
            <div class="extreme-card windiest">
                <div class="extreme-icon">&#128168;</div>
                <div class="extreme-label" data-translate="windiest">Windiest</div>
                <div class="extreme-city" id="windiestCity">--</div>
                <div class="extreme-value" id="windiestWind">-- km/h</div>
            </div>
        </div>
    </section>

    <section class="world-map-section card">
        <h2><span class="section-icon">&#127758;</span> <span data-translate="interactiveMap">Interactive World Weather Map</span></h2>
        <div class="map-container" id="worldMapContainer">
            <div id="worldMap" style="height: 400px; width: 100%; border-radius: 8px;"></div>
        </div>
    </section>

    <section class="continents-section card">
        <h2><span class="section-icon">&#127759;</span> <span data-translate="continentalOverview">Continental Weather Overview</span></h2>
        <div class="continent-tabs">
            <button class="continent-tab active" data-continent="all" data-translate="allContinents">All</button>
            <button class="continent-tab" data-continent="Americas" data-translate="americas">Americas</button>
            <button class="continent-tab" data-continent="Europe" data-translate="europe">Europe</button>
            <button class="continent-tab" data-continent="Asia" data-translate="asia">Asia</button>
            <button class="continent-tab" data-continent="Africa" data-translate="africa">Africa</button>
            <button class="continent-tab" data-continent="Oceania" data-translate="oceania">Oceania</button>
        </div>
        <div class="continent-averages" id="continentAverages"></div>
        <div class="world-weather-grid" id="worldWeatherGrid"></div>
    </section>

    <section class="capitals-section card">
        <h2><span class="section-icon">&#127963;</span> <span data-translate="capitalCities">Capital Cities Weather</span></h2>
        <div class="capitals-controls">
            <input type="text" id="capitalSearch" class="capital-search" placeholder="Search capitals..." data-placeholder="searchCapitals">
            <select id="capitalSort" class="capital-sort">
                <option value="name" data-translate="sortByName">Sort by Name</option>
                <option value="temp-high" data-translate="sortByTempHigh">Temperature (High to Low)</option>
                <option value="temp-low" data-translate="sortByTempLow">Temperature (Low to High)</option>
                <option value="continent" data-translate="sortByContinent">Sort by Continent</option>
            </select>
        </div>
        <div class="capitals-grid" id="capitalsGrid"></div>
    </section>
</div>

<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>

<script>
let globalWeatherData = null;
let capitalsWeatherData = null;
let worldMap = null;
let cityMarkers = [];

document.addEventListener('DOMContentLoaded', function() {
    initWorldMap();
    loadGlobalWeather();
    loadCapitalsWeather();
    
    document.getElementById('refreshGlobalWeather').addEventListener('click', function() {
        loadGlobalWeather();
        loadCapitalsWeather();
    });
    
    document.querySelectorAll('.continent-tab').forEach(tab => {
        tab.addEventListener('click', function() {
            document.querySelectorAll('.continent-tab').forEach(t => t.classList.remove('active'));
            this.classList.add('active');
            filterByContinent(this.dataset.continent);
        });
    });
    
    document.getElementById('capitalSearch').addEventListener('input', filterCapitals);
    document.getElementById('capitalSort').addEventListener('change', sortCapitals);
    
    setInterval(loadGlobalWeather, 300000);
});

function initWorldMap() {
    worldMap = L.map('worldMap').setView([20, 0], 2);
    L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
        attribution: '&copy; OpenStreetMap contributors'
    }).addTo(worldMap);
}

async function loadGlobalWeather() {
    try {
        const response = await fetch('api/global-weather.php?type=major');
        const data = await response.json();
        
        if (data.success) {
            globalWeatherData = data;
            updateExtremes(data.extremes);
            updateWeatherGrid(data.cities);
            updateContinentAverages(data.continents);
            updateMapMarkers(data.cities);
            updateWeatherTicker(data.cities);
            document.getElementById('globalLastUpdated').textContent = new Date().toLocaleTimeString();
        }
    } catch (error) {
        console.error('Error loading global weather:', error);
    }
}

async function loadCapitalsWeather() {
    try {
        const response = await fetch('api/global-weather.php?type=capitals');
        const data = await response.json();
        
        if (data.success) {
            capitalsWeatherData = data.cities.filter(c => c.capital);
            updateCapitalsGrid(capitalsWeatherData);
        }
    } catch (error) {
        console.error('Error loading capitals weather:', error);
    }
}

function updateExtremes(extremes) {
    if (extremes.hottest.city) {
        document.getElementById('hottestCity').textContent = `${extremes.hottest.city.name}, ${extremes.hottest.city.country}`;
        document.getElementById('hottestTemp').textContent = `${extremes.hottest.city.temperature}°C`;
    }
    if (extremes.coldest.city) {
        document.getElementById('coldestCity').textContent = `${extremes.coldest.city.name}, ${extremes.coldest.city.country}`;
        document.getElementById('coldestTemp').textContent = `${extremes.coldest.city.temperature}°C`;
    }
    if (extremes.wettest.city) {
        document.getElementById('wettestCity').textContent = `${extremes.wettest.city.name}, ${extremes.wettest.city.country}`;
        document.getElementById('wettestPrecip').textContent = `${extremes.wettest.precip.toFixed(1)} mm`;
    }
    if (extremes.windiest.city) {
        document.getElementById('windiestCity').textContent = `${extremes.windiest.city.name}, ${extremes.windiest.city.country}`;
        document.getElementById('windiestWind').textContent = `${extremes.windiest.city.wind_speed} km/h`;
    }
}

function updateWeatherGrid(cities) {
    const grid = document.getElementById('worldWeatherGrid');
    grid.innerHTML = cities.map(city => `
        <div class="world-city-card" data-continent="${city.continent}">
            <div class="city-header">
                <div class="city-name">${city.name}</div>
                <div class="city-country">${city.country}</div>
            </div>
            <div class="city-weather">
                <div class="city-icon">${getWeatherEmoji(city.icon, city.is_day)}</div>
                <div class="city-temp">${city.temperature}°C</div>
            </div>
            <div class="city-condition">${city.condition}</div>
            <div class="city-details">
                <span title="Wind">&#128168; ${city.wind_speed} km/h</span>
                <span title="Humidity">&#128167; ${city.humidity}%</span>
            </div>
            <div class="city-time">${getCurrentTime(city.timezone)}</div>
        </div>
    `).join('');
}

function updateContinentAverages(continents) {
    const container = document.getElementById('continentAverages');
    container.innerHTML = Object.entries(continents).map(([name, data]) => `
        <div class="continent-avg-card">
            <div class="continent-name">${name}</div>
            <div class="continent-avg-temp">${data.avgTemp}°C avg</div>
            <div class="continent-cities">${data.cities.length} cities</div>
        </div>
    `).join('');
}

function updateMapMarkers(cities) {
    cityMarkers.forEach(marker => worldMap.removeLayer(marker));
    cityMarkers = [];
    
    cities.forEach(city => {
        const marker = L.marker([city.lat, city.lon])
            .addTo(worldMap)
            .bindPopup(`
                <div class="map-popup">
                    <strong>${city.name}, ${city.country}</strong><br>
                    ${getWeatherEmoji(city.icon, city.is_day)} ${city.temperature}°C<br>
                    ${city.condition}<br>
                    <small>Wind: ${city.wind_speed} km/h | Humidity: ${city.humidity}%</small>
                </div>
            `);
        cityMarkers.push(marker);
    });
}

function updateWeatherTicker(cities) {
    const ticker = document.getElementById('tickerContent');
    const tickerHTML = cities.map(city => 
        `<span class="ticker-item">
            <span class="ticker-city">${city.name}</span>
            <span class="ticker-temp">${getWeatherEmoji(city.icon, city.is_day)} ${city.temperature}°C</span>
        </span>`
    ).join('');
    ticker.innerHTML = tickerHTML + tickerHTML;
}

function updateCapitalsGrid(capitals) {
    const grid = document.getElementById('capitalsGrid');
    grid.innerHTML = capitals.map(city => `
        <div class="capital-card" data-name="${city.name.toLowerCase()}" data-continent="${city.continent}" data-temp="${city.temperature}">
            <div class="capital-flag">${getContinentFlag(city.continent)}</div>
            <div class="capital-info">
                <div class="capital-name">${city.name}</div>
                <div class="capital-country">${city.country}</div>
            </div>
            <div class="capital-weather">
                <span class="capital-icon">${getWeatherEmoji(city.icon, city.is_day)}</span>
                <span class="capital-temp">${city.temperature}°C</span>
            </div>
            <div class="capital-condition">${city.condition}</div>
        </div>
    `).join('');
}

function filterByContinent(continent) {
    const cards = document.querySelectorAll('.world-city-card');
    cards.forEach(card => {
        if (continent === 'all' || card.dataset.continent === continent) {
            card.style.display = '';
        } else {
            card.style.display = 'none';
        }
    });
}

function filterCapitals() {
    const search = document.getElementById('capitalSearch').value.toLowerCase();
    const cards = document.querySelectorAll('.capital-card');
    cards.forEach(card => {
        if (card.dataset.name.includes(search)) {
            card.style.display = '';
        } else {
            card.style.display = 'none';
        }
    });
}

function sortCapitals() {
    const sortBy = document.getElementById('capitalSort').value;
    const grid = document.getElementById('capitalsGrid');
    const cards = Array.from(grid.querySelectorAll('.capital-card'));
    
    cards.sort((a, b) => {
        switch(sortBy) {
            case 'name':
                return a.dataset.name.localeCompare(b.dataset.name);
            case 'temp-high':
                return parseFloat(b.dataset.temp) - parseFloat(a.dataset.temp);
            case 'temp-low':
                return parseFloat(a.dataset.temp) - parseFloat(b.dataset.temp);
            case 'continent':
                return a.dataset.continent.localeCompare(b.dataset.continent);
            default:
                return 0;
        }
    });
    
    cards.forEach(card => grid.appendChild(card));
}

function getWeatherEmoji(icon, isDay) {
    const emojis = {
        'sunny': isDay ? '☀️' : '🌙',
        'clear-night': '🌙',
        'partly-cloudy': isDay ? '⛅' : '☁️',
        'cloudy': '☁️',
        'rainy': '🌧️',
        'thunderstorm': '⛈️',
        'snowy': '❄️',
        'foggy': '🌫️'
    };
    return emojis[icon] || '☁️';
}

function getContinentFlag(continent) {
    const flags = {
        'Americas': '🌎',
        'Europe': '🌍',
        'Asia': '🌏',
        'Africa': '🌍',
        'Oceania': '🌏'
    };
    return flags[continent] || '🌐';
}

function getCurrentTime(timezone) {
    try {
        return new Date().toLocaleTimeString('en-US', { 
            timeZone: timezone, 
            hour: '2-digit', 
            minute: '2-digit',
            hour12: true 
        });
    } catch {
        return '--:--';
    }
}
</script>

<?php include 'footer.php'; ?>
