<?php

function getCalendrier()
{

    // URL de la page à analyser
    $url = 'https://www.sabradou.com/index.php';

    // Récupération du contenu de la page
    $html = file_get_contents($url);

    // Création d'un objet DOMDocument
    $dom = new DOMDocument();
    libxml_use_internal_errors(true); // Ignore les erreurs de parsing HTML
    $dom->loadHTML($html);
    libxml_clear_errors();

    // Recherche de la div avec l'id "calendrier"
    $calendrierDiv = $dom->getElementById('calendrier');

    // Récupération des liens dans la liste
    $calendrierLinks = $calendrierDiv->getElementsByTagName('a');

    // Tableau pour stocker les nodes et les URLs
    $calendrier = array();

    // Parcourir les liens et récupérer les nodes et les URLs
    foreach ($calendrierLinks as $link) {
        $node = $link->nodeValue;
        $url = $link->getAttribute('href');
        $calendrier[] = array(
            'node' => $node,
            'url' =>  $url,
        );
    }
    return ($calendrier);
}
function getCities($html)
{
    // Création d'un objet DOMDocument
    $html = file_get_contents('https://www.sabradou.com/' . $html);
    $dom = new DOMDocument();
    libxml_use_internal_errors(true); // Ignore les erreurs de parsing HTML
    $dom->loadHTML($html);
    libxml_clear_errors();

    // Recherche du div avec l'id "sommaire-centre"
    $sommaireCentreDiv = $dom->getElementById('sommaire-centre');

    // Recherche des balises <li> dans le div
    $liElements = $sommaireCentreDiv->getElementsByTagName('li');

    // Tableau pour stocker les villes
    $cities = array();

    // Parcourir les balises <li> et extraire le texte cliquable des liens
    foreach ($liElements as $liElement) {
        // Vérifier s'il y a un lien dans le <li>
        $linkElement = $liElement->getElementsByTagName('a')->item(0);
        if ($linkElement) {
            $ville = $linkElement->nodeValue;
            $ville = preg_replace('/^(B\s|\d{2}\s)/', '', $ville);
            $href = $linkElement->getAttribute('href');
            $cities[] = array(
                'name' => $ville,
                'href' => $href,
            );
        }
    }
    // Créer un tableau temporaire contenant les valeurs de la clé "name"
    $names = array_column($cities, 'name');

    // Trier le tableau temporaire par ordre alphabétique
    array_multisort($names, SORT_ASC, $cities);
    ;

    return $cities;
}

function geocode($cities)
{
    // Tableau pour stocker les villes et leurs coordonnées
    $citiesData = array();

    // Charger les données existantes depuis la base JSON
    $jsonData = file_get_contents('cities.json');
    $existingData = json_decode($jsonData, true);

    // Parcourir les villes et géocoder leurs coordonnées
    foreach ($cities as $city) {
        $ville = $city['name'];
        $href = $city['href'];

        // Vérifier si les coordonnées de la ville existent déjà dans la base
        if (isset($existingData[$ville])) {
            // Utiliser les coordonnées existantes
            $latitude = $existingData[$ville]['lat'];
            $longitude = $existingData[$ville]['lon'];
        } else {
            // Requête à l'API Nominatim
            $options = array(
                'http' => array(
                    'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
                ),
            );
            $context = stream_context_create($options);
            $url = 'https://nominatim.openstreetmap.org/search?city=' . urlencode($ville) . '&format=json';
            $response = file_get_contents($url, false, $context);
            $data = json_decode($response, true);

            // Vérifier si la requête a réussi
            if (!empty($data)) {
                // Récupérer les coordonnées géographiques de la première correspondance
                $latitude = $data[0]['lat'];
                $longitude = $data[0]['lon'];

                // Stocker les coordonnées dans la base JSON
                $existingData[$ville] = array(
                    'lat' => $latitude,
                    'lon' => $longitude,
                );
            }
        }

        // Ajouter la ville et ses coordonnées au tableau
        $citiesData[] = array(
            'name' => $ville,
            'lat' => $latitude,
            'lon' => $longitude,
            'href' => $href,
        );
    }

    // Enregistrer les données mises à jour dans la base JSON
    file_put_contents('cities.json', json_encode($existingData));

    return $citiesData;
}