<?php
/**
 * Script de limpieza manual (Admin)
 * Elimina registros idénticos consecutivos de la tabla mediciones
 */
require_once '../config.php';

header('Content-Type: application/json; charset=utf-8');

$isAuthorized = (php_sapi_name() === 'cli') ||
    (($_SESSION['role'] ?? '') === 'admin') ||
    (isset($_GET['key']) && $_GET['key'] === API_KEY);

if (!$isAuthorized) {
    jsonResponse(false, 'No autorizado. Inicie sesión como Admin o use "?key=API_KEY"', null, 403);
}

$pdo = getDBConnection();
if (!$pdo) {
    jsonResponse(false, 'Error de conexión', null, 500);
}

try {
    // 1. Obtener todas las mediciones de los últimos 3 días (para no saturar memoria)
    // Opcionalmente se puede extender a 30 días si es necesario
    $stmt = $pdo->query("SELECT * FROM mediciones ORDER BY buque_id, fecha ASC");
    $mediciones = $stmt->fetchAll();

    $idsToDelete = [];
    $lastRecord = null;
    $deletedCount = 0;

    foreach ($mediciones as $m) {
        if ($lastRecord && $m['buque_id'] === $lastRecord['buque_id']) {
            $isIdentical = true;
            for ($i = 1; $i <= 14; $i++) {
                if ($m["temp$i"] !== $lastRecord["temp$i"]) {
                    $isIdentical = false;
                    break;
                }
            }

            if ($isIdentical) {
                // Si es idéntico al anterior, lo marcamos para borrar
                $idsToDelete[] = $m['id'];
            } else {
                // Solo actualizamos el "punto de referencia" si no es idéntico
                $lastRecord = $m;
            }
        } else {
            $lastRecord = $m;
        }
    }

    // 2. Ejecutar el borrado por bloques (para evitar errores de query larga)
    if (!empty($idsToDelete)) {
        $chunks = array_chunk($idsToDelete, 500);
        foreach ($chunks as $chunk) {
            $placeholders = implode(',', array_fill(0, count($chunk), '?'));
            $stmtDel = $pdo->prepare("DELETE FROM mediciones WHERE id IN ($placeholders)");
            $stmtDel->execute($chunk);
            $deletedCount += count($chunk);
        }
    }

    jsonResponse(true, "Limpieza completada. Se eliminaron $deletedCount registros basura/repetidos.", [
        'total_analizados' => count($mediciones),
        'total_borrados' => $deletedCount
    ]);

} catch (PDOException $e) {
    jsonResponse(false, 'Error en script de limpieza: ' . $e->getMessage());
}
