<?php
// ajax/geo.php - Geocodificação com Nominatim
require_once __DIR__ . '/../config.php';
require_once __DIR__ . '/../auth.php';
requireLogin();

header('Content-Type: application/json');

$endereco = $_GET['endereco'] ?? '';
if (empty($endereco)) {
    echo json_encode(['error' => 'Endereço não informado']);
    exit;
}

// Cache de geocodificação
$cacheKey = 'geo_' . md5($endereco);
$cached = cacheGet($cacheKey);
if ($cached) {
    echo json_encode($cached);
    exit;
}

// Usar Nominatim (OpenStreetMap)
$url = 'https://nominatim.openstreetmap.org/search?' . http_build_query([
    'q' => $endereco . ', SP, Brasil',
    'format' => 'json',
    'limit' => 1,
    'addressdetails' => 1
]);

$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERAGENT => NOMINATIM_USER_AGENT,
    CURLOPT_TIMEOUT => 5,
    CURLOPT_SSL_VERIFYPEER => false
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($httpCode === 200 && $response) {
    $data = json_decode($response, true);
    if (!empty($data)) {
        $result = [
            'lat' => $data[0]['lat'],
            'lng' => $data[0]['lon'],
            'display_name' => $data[0]['display_name']
        ];
        cacheSet($cacheKey, $result, 86400); // Cache por 24 horas
        echo json_encode($result);
        exit;
    }
}

echo json_encode(['error' => 'Não foi possível geocodificar o endereço']);
