<?php
/**
 * Normaliza un texto: convierte a mayúsculas, elimina acentos y caracteres invisibles.
 * Si el tipo es 'email', 'fecha' o 'numerico', lo devuelve sin cambios.
 *
 * @param string $texto
 * @param string $tipo ['texto', 'email', 'fecha', 'numerico']
 * @return string
 */
function limpiarTexto($texto, $tipo = 'texto') {
  $texto = trim($texto ?? '');

  // Excepciones
  if ($tipo === 'email') {
    return strtolower($texto);
  }

  if ($tipo === 'fecha' || $tipo === 'numerico') {
    return $texto;
  }
  // Convertir a UTF-8 si no lo está
  $texto = mb_convert_encoding($texto, 'UTF-8', 'auto');

  // Eliminar espacios invisibles
  $texto = preg_replace('/[\x00-\x1F\x7F\xA0]/u', '', $texto);
  $texto = preg_replace('/\s+/', ' ', $texto);

  // Quitar acentos
  $texto = strtr($texto, [
    'Á' => 'A', 'É' => 'E', 'Í' => 'I', 'Ó' => 'O', 'Ú' => 'U',
    'á' => 'A', 'é' => 'E', 'í' => 'I', 'ó' => 'O', 'ú' => 'U',
    'Ñ' => 'Ñ', 'ñ' => 'Ñ', // Se mantiene la Ñ en mayúscula
    'ä' => 'A', 'ë' => 'E', 'ï' => 'I', 'ö' => 'O', 'ü' => 'U',
    'Ä' => 'A', 'Ë' => 'E', 'Ï' => 'I', 'Ö' => 'O', 'Ü' => 'U',
    'ç' => 'C', 'Ç' => 'C'
  ]);

  // Convertir a mayúsculas
  return strtoupper($texto);
}
?>
