<?php
/**
 * Script para actualizar direcciones de clientes que tienen "Coordenadas: X, Y"
 * Usa Google Maps Geocoding API para obtener direcciones reales desde coordenadas
 */

require_once 'Conexion.php';

// IMPORTANTE: Agregar tu API Key de Google Maps aquí
// Obtén una gratis en: https://console.cloud.google.com/google/maps-apis
$GOOGLE_MAPS_API_KEY = ''; // AGREGAR TU API KEY AQUÍ

if (empty($GOOGLE_MAPS_API_KEY)) {
    die("ERROR: Necesitas agregar tu Google Maps API Key en la línea 11 de este archivo.\n");
}

try {
    $conn = Conexion::conectar();

    // Obtener clientes con "Coordenadas:" en el campo direccion
    $query = "SELECT id, codigo, nombre_comercial, direccion, latitud, longitud
              FROM clientes
              WHERE direccion LIKE 'Coordenadas:%'
              AND latitud IS NOT NULL
              AND longitud IS NOT NULL
              ORDER BY id";

    $stmt = $conn->prepare($query);
    $stmt->execute();
    $clientes = $stmt->fetchAll(PDO::FETCH_ASSOC);

    $total = count($clientes);
    echo "Encontrados $total clientes con coordenadas en lugar de direcciones.\n\n";

    if ($total === 0) {
        echo "¡Todos los clientes ya tienen direcciones reales!\n";
        exit(0);
    }

    $actualizados = 0;
    $errores = 0;

    foreach ($clientes as $index => $cliente) {
        $numero = $index + 1;
        echo "[$numero/$total] Procesando: {$cliente['nombre_comercial']} ({$cliente['codigo']})...\n";

        $lat = $cliente['latitud'];
        $lng = $cliente['longitud'];

        // Llamar a Google Maps Geocoding API
        $url = "https://maps.googleapis.com/maps/api/geocode/json?latlng=$lat,$lng&key=$GOOGLE_MAPS_API_KEY&language=es";

        $response = @file_get_contents($url);

        if ($response === false) {
            echo "  ❌ Error al conectar con Google Maps API\n";
            $errores++;
            continue;
        }

        $data = json_decode($response, true);

        if ($data['status'] === 'OK' && !empty($data['results'])) {
            $direccionReal = $data['results'][0]['formatted_address'];

            // Actualizar en la base de datos
            $updateQuery = "UPDATE clientes
                           SET direccion = :direccion,
                               updated_at = NOW()
                           WHERE id = :id";

            $updateStmt = $conn->prepare($updateQuery);
            $updateStmt->bindParam(':direccion', $direccionReal);
            $updateStmt->bindParam(':id', $cliente['id']);

            if ($updateStmt->execute()) {
                echo "  ✅ Actualizado: $direccionReal\n";
                $actualizados++;
            } else {
                echo "  ❌ Error al actualizar en BD\n";
                $errores++;
            }
        } else if ($data['status'] === 'OVER_QUERY_LIMIT') {
            echo "  ⚠️  Límite de consultas alcanzado. Espera un momento y vuelve a ejecutar.\n";
            break;
        } else {
            echo "  ❌ No se pudo obtener dirección: {$data['status']}\n";
            $errores++;
        }

        // Pequeña pausa para no exceder límites de API
        usleep(200000); // 0.2 segundos

        echo "\n";
    }

    echo "\n=== RESUMEN ===\n";
    echo "Total procesados: $total\n";
    echo "Actualizados exitosamente: $actualizados\n";
    echo "Errores: $errores\n";

} catch (PDOException $e) {
    echo "Error de base de datos: " . $e->getMessage() . "\n";
    exit(1);
}
?>
