<?php
// checkVale.php
session_start();
header('Content-Type: application/json; charset=UTF-8');

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

// --- Normalización / validación del número de vale ---
$numero_vale = $_POST['numero_vale'] ?? '';
$numero_vale = strtoupper(preg_replace('/[^A-Z0-9\-\/]/', '', trim($numero_vale)));

if ($numero_vale === '' || !preg_match('/^[A-Z0-9\-\/]{1,20}$/', $numero_vale)) {
  echo json_encode([
    'ok' => false,
    'duplicate' => false,
    'msg' => 'Formato de N° de vale inválido (solo letras, números, "-" y "/"; máx. 20).'
  ]);
  exit;
}

// --- Parámetros opcionales para edición (excluir el propio registro) ---
$id_excluir = isset($_POST['id']) ? (int)$_POST['id'] : 0;
// Puedes enviar 'scope' o 'tabla' con valores: 'vehiculo' o 'galonera'
$scope = strtolower(trim($_POST['scope'] ?? ($_POST['tabla'] ?? '')));

// Resolver a nombre de tabla para la exclusión
$tabla_excluir = null;
if ($scope === 'vehiculo')  $tabla_excluir = 'control_combustible';
if ($scope === 'galonera')  $tabla_excluir = 'control_abastecimiento_galonera';

try {
  $conn = new Conexion_BD();
  $db = $conn->getConnection();
  mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

  $duplicado_en = []; // acumula dónde se encontró

  // --- 1) Buscar en control_combustible ---
  if ($id_excluir > 0 && $tabla_excluir === 'control_combustible') {
    $sql = "SELECT id FROM control_combustible WHERE numero_vale = ? AND id <> ? LIMIT 1";
    $st  = $db->prepare($sql);
    $st->bind_param("si", $numero_vale, $id_excluir);
  } else {
    $sql = "SELECT id FROM control_combustible WHERE numero_vale = ? LIMIT 1";
    $st  = $db->prepare($sql);
    $st->bind_param("s", $numero_vale);
  }
  $st->execute();
  $st->store_result();
  if ($st->num_rows > 0) {
    $duplicado_en[] = 'control_combustible';
  }
  $st->close();

  // --- 2) Buscar en control_abastecimiento_galonera ---
  if ($id_excluir > 0 && $tabla_excluir === 'control_abastecimiento_galonera') {
    $sql = "SELECT id FROM control_abastecimiento_galonera WHERE numero_vale = ? AND id <> ? LIMIT 1";
    $st  = $db->prepare($sql);
    $st->bind_param("si", $numero_vale, $id_excluir);
  } else {
    $sql = "SELECT id FROM control_abastecimiento_galonera WHERE numero_vale = ? LIMIT 1";
    $st  = $db->prepare($sql);
    $st->bind_param("s", $numero_vale);
  }
  $st->execute();
  $st->store_result();
  if ($st->num_rows > 0) {
    $duplicado_en[] = 'control_abastecimiento_galonera';
  }
  $st->close();

  $conn->closeConnection();

  $isDup = !empty($duplicado_en);
  $msg = $isDup
    ? ("El N° de vale '{$numero_vale}' ya está registrado en: " .
       implode(' y ', array_map(function($t){
         return $t === 'control_combustible'
           ? 'Abastecimientos de Vehículos'
           : 'Abastecimientos de Galoneras';
       }, $duplicado_en)) . '.')
    : 'Disponible';

  echo json_encode([
    'ok' => true,
    'duplicate' => $isDup,
    'where' => $duplicado_en, // opcional: ['control_combustible', ...]
    'msg' => $msg
  ]);

} catch (Throwable $e) {
  echo json_encode([
    'ok' => false,
    'duplicate' => false,
    'msg' => 'Error al validar el N° de vale: ' . $e->getMessage()
  ]);
}
