<?php
// ../../Controlador/Ctrl_Administrador/MySQL_Listar_Grifos_DT.php
declare(strict_types=1);

// ---- Cabeceras para evitar caché en navegadores y proxies ----
header('Content-Type: application/json; charset=utf-8');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Expires: 0');

require_once __DIR__ . '/../Utilidades/Conexion_BD.php';
require_once __DIR__ . '/MySQL_Mostrar_Grifos.php';

/**
 * Devuelve una cadena segura (trim + sin null).
 */
function s(?string $v): string {
  return trim((string)$v);
}

/**
 * Normaliza estados a los usados en el front.
 * - operativo      -> activo
 * - no_operativo   -> inactivo
 * - (resto) en minúsculas
 */
function normalizarEstado(string $estado): string {
  $e = strtolower(trim($estado));
  if ($e === 'operativo')    return 'activo';
  if ($e === 'no_operativo') return 'inactivo';
  return $e;
}

/**
 * Formatea fechas a YYYY-MM-DD si vienen con hora o vacías.
 */
function fmtFecha(?string $v): string {
  $v = s($v);
  if ($v === '') return '';
  // Si es YYYY-MM-DD HH:MM:SS o similar, toma los 10 primeros
  if (preg_match('/^\d{4}-\d{2}-\d{2}/', $v) === 1) {
    return substr($v, 0, 10);
  }
  // Si viene en otro formato, intenta normalizar con DateTime
  try {
    $dt = new DateTime($v);
    return $dt->format('Y-m-d');
  } catch (Throwable $e) {
    return $v; // Devuelve como llegó si no se pudo parsear
  }
}

try {
  $conn = new Conexion_BD();
  $MostrarGrifos = new MostrarGrifos($conn);
  $rows = $MostrarGrifos->ObtenerTodosLosGrifos(); // Debe incluir fecha_estado_desde

  $out = [];
  foreach ($rows as $g) {
    $estado = normalizarEstado((string)($g['estado'] ?? ''));

    $out[] = [
      'id'                 => isset($g['id']) ? (int)$g['id'] : 0,
      'nombre'             => s($g['nombre'] ?? ''),
      'ruc'                => s($g['ruc'] ?? ''),
      'telefono'           => s($g['telefono'] ?? ''),
      'lugar'              => s($g['lugar'] ?? ''),
      'estado'             => $estado,
      'motivo_estado'      => s($g['motivo_estado'] ?? ''),
      'fecha_estado_desde' => fmtFecha($g['fecha_estado_desde'] ?? ''),
      'created_at'         => fmtFecha($g['created_at'] ?? ''),
    ];
  }

  echo json_encode($out, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
} catch (Throwable $e) {
  http_response_code(500);
  echo json_encode([
    'error'   => true,
    'message' => 'Error al listar grifos',
    'detail'  => $e->getMessage(),
  ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
} finally {
  if (isset($conn)) {
    $conn->closeConnection();
  }
}
