<?php
function construirSentenciaInsert($tabla, $datos) {
  // Filtramos campos que no queremos en el INSERT
  $camposExcluidos = ['accion'];
  $camposInsertar = array_diff_key($datos, array_flip($camposExcluidos));

  // Preparamos los nombres de las columnas y los marcadores de posición
  $columnas = array_keys($camposInsertar);
  $marcadores = array_fill(0, count($columnas), '?');

  // Construimos la sentencia SQL
  $sql = "INSERT INTO $tabla ([" . implode('], [', $columnas) . "]) VALUES (" . implode(', ', $marcadores) . ")";

  // Preparamos los parámetros
  $parametros = array_values($camposInsertar);

  return ['sql' => $sql, 'parametros' => $parametros];
}

function construirSentenciaUpdate($tabla, $datos) {
  // Filtramos campos que no queremos en el UPDATE
  $camposExcluidos = ['accion', 'id'];
  $camposActualizar = array_diff_key($datos, array_flip($camposExcluidos));

  // Construimos la parte SET de la sentencia
  $setCampos = [];
  $parametros = [];
  foreach ($camposActualizar as $campo => $valor) {
    // Usamos corchetes en lugar de backticks para SQL Server
    $setCampos[] = "[$campo] = ?";
    $parametros[] = $valor;
  }

  // Construimos la sentencia SQL
  $sql = "UPDATE $tabla SET " . implode(', ', $setCampos) . " WHERE id = ?";

  // Añadimos el id al final de los parámetros
  $parametros[] = $datos['id'];

  return ['sql' => $sql, 'parametros' => $parametros];
}

function normalizarAlojamiento(array $datos): array {

  // Cursos que tienen selector alojamiento_*
  $cursos = ['bp', 'b1', 'b2', 'b3'];

  foreach ($cursos as $c) {
    $kA = "alojamiento_$c";
    $kI = "alojamiento_inicio_$c";
    $kF = "alojamiento_fin_$c";

    // Si no viene alojamiento_* no tocamos nada
    if (!array_key_exists($kA, $datos)) continue;

    $valA = strtoupper(trim((string)$datos[$kA]));

    // Si NO hay alojamiento => forzamos NULL en inicio/fin (aunque no vengan)
    if ($valA === 'N' || $valA === '') {
      $datos[$kI] = null;
      $datos[$kF] = null;
      continue;
    }

    // Si SI hay alojamiento => si no vienen fechas, al menos dejamos null (o podés validar)
    if ($valA === 'S') {
      if (!array_key_exists($kI, $datos) || trim((string)$datos[$kI]) === '') $datos[$kI] = null;
      if (!array_key_exists($kF, $datos) || trim((string)$datos[$kF]) === '') $datos[$kF] = null;
    }
  }

  return $datos;
}
