<?php
// ../../Controlador/Ctrl_Administrador/MySQL_Borrar_Chofer.php
require_once "../Utilidades/Conexion_BD.php";
require_once "../Utilidades/Auditoria.php";
session_start();

if (!isset($_SESSION['usuario'])) {
  header("Location: ../../Controlador/Utilidades/Sesion_Destroy.php");
  exit();
}

if (!isset($_GET['IDC']) || empty($_GET['IDC'])) {
  header("Location: ../../Vista/Administrador/Adm_Gestion_Choferes.php");
  exit();
}

$id_chofer = (int) $_GET['IDC'];
$conn = new Conexion_BD();
$db   = $conn->getConnection();

// --- (1) Verificar existencia del chofer ---
$sqlExiste = "SELECT id FROM choferes WHERE id = ?";
$stmt = $conn->prepare($sqlExiste);
$stmt->bind_param("i", $id_chofer);
$stmt->execute();
$res = $stmt->get_result();
if (!$res || $res->num_rows === 0) {
  $stmt->close();
  $conn->closeConnection();
  $_SESSION['error_eliminar_chofer'] = "No se encontró el chofer con ID: $id_chofer.";
  header("Location: ../../Vista/Administrador/Adm_Gestion_Choferes.php");
  exit();
}
$stmt->close();

// --- (2) Bloquear si tiene registros en abastecimiento ---
$sqlCheck = "SELECT COUNT(*) AS total FROM control_combustible WHERE chofer_id = ?";
$stmt = $conn->prepare($sqlCheck);
$stmt->bind_param("i", $id_chofer);
$stmt->execute();
$tot = $stmt->get_result()->fetch_assoc()['total'] ?? 0;
$stmt->close();

if ($tot > 0) {
  $conn->closeConnection();
  $_SESSION['error_eliminar_chofer'] = "El chofer con ID $id_chofer no puede ser eliminado porque tiene registros en abastecimiento.";
  header("Location: ../../Vista/Administrador/Adm_Gestion_Choferes.php");
  exit();
}

// --- (3) Borrado con transacción: primero historial, luego chofer ---
$db->begin_transaction();
try {
  // 3.1 Borrar historial de estados (evita el error del FK fk_hist_chofer)
  $sqlDelHist = "DELETE FROM chofer_estado_historial WHERE chofer_id = ?";
  $stmt = $conn->prepare($sqlDelHist);
  $stmt->bind_param("i", $id_chofer);
  $stmt->execute();
  $stmt->close();

  // 3.2 Borrar chofer
  $sqlDelChofer = "DELETE FROM choferes WHERE id = ?";
  $stmt = $conn->prepare($sqlDelChofer);
  $stmt->bind_param("i", $id_chofer);
  $stmt->execute();
  $af = $stmt->affected_rows;
  $stmt->close();

  if ($af <= 0) {
    throw new Exception("La eliminación no afectó ninguna fila (el chofer no existía).");
  }

  // 3.3 Auditoría
  $id_usuario     = $_SESSION['id_usuario'] ?? 0;
  $nombre_usuario = $_SESSION['nombre'] ?? ($_SESSION['usuario'] ?? 'sistema');
  $tipo_usuario   = $_SESSION['rol'] ?? '';
  $descripcion    = "Se eliminó el chofer con ID: $id_chofer";

  registrarAuditoria(
    'choferes',
    'eliminar',
    $descripcion,
    $id_usuario,
    $nombre_usuario,
    'choferes',
    $id_chofer,
    $tipo_usuario
  );

  $db->commit();

  // Para tu notificación tipo Swal
  $_SESSION['id_chofer_eliminado'] = $id_chofer;

  $conn->closeConnection();
  header("Location: ../../Vista/Administrador/Adm_Gestion_Choferes.php");
  exit();

} catch (Throwable $e) {
  $db->rollback();
  $conn->closeConnection();
  $_SESSION['error_eliminar_chofer'] = "Error al eliminar: " . $e->getMessage();
  header("Location: ../../Vista/Administrador/Adm_Gestion_Choferes.php");
  exit();
}
