Checks:
  # Estrategia: Habilitar checks uno por uno, aplicar fix, compilar, commit
  # ✅ Check 1: readability-uppercase-literal-suffix (1.0f → 1.0F)
  # ✅ Check 2: readability-math-missing-parentheses (claridad en ops matemáticas)
  # ✅ Check 3: readability-identifier-naming (DESHABILITADO temporalmente - cascada de cambios)
  # ✅ Check 4: readability-const-return-type (código ya cumple)
  # ✅ Check 5: readability-else-after-return (código ya cumple)
  # ✅ Check 6: readability-simplify-boolean-expr (código ya cumple)
  # ✅ Check 7: readability-* (225 fixes aplicados)
  - readability-*
  - -readability-identifier-naming              # Excluido (cascada de cambios)
  - -readability-identifier-length              # Excluido (nombres cortos son OK)
  - -readability-magic-numbers                  # Excluido (muchos falsos positivos)
  - -readability-convert-member-functions-to-static  # Excluido (rompe encapsulación)
  - -readability-use-anyofallof                 # Excluido (C++20 ranges - no todos los compiladores)
  - -readability-function-cognitive-complexity  # Excluido (complejidad ciclomática aceptable)
  - -clang-analyzer-security.insecureAPI.rand   # Excluido (rand() es suficiente para juegos)
  # ✅ Check 8: modernize-* (215 fixes aplicados)
  - modernize-*
  - -modernize-use-trailing-return-type         # Excluido (estilo controversial)
  - -modernize-avoid-c-arrays                   # Excluido (arrays C son OK en algunos contextos)
  # ✅ Check 9: performance-* (91 fixes aplicados)
  - performance-*
  - -performance-enum-size                      # Excluido (tamaño de enum no crítico)
  # ✅ Check 10: bugprone-* (0 fixes - todos eran falsos positivos)
  - bugprone-*
  - -bugprone-easily-swappable-parameters       # Excluido (muchos falsos positivos)
  - -bugprone-narrowing-conversions             # Excluido (conversiones intencionales)
  - -bugprone-integer-division                  # Excluido (divisiones enteras OK en contexto)
  - -bugprone-branch-clone                      # Excluido (fall-through en switch es intencional)
  - -bugprone-switch-missing-default-case       # Excluido (no todos los switches necesitan default)
  - -bugprone-implicit-widening-of-multiplication-result  # Excluido (valores pequeños, sin overflow)
  - -bugprone-exception-escape                  # Excluido (excepciones en main terminan el programa - OK)
  # ✅ Check 11: llvm-include-order (validar orden de includes - 0 errores)
  - llvm-include-order
  # ⏸️  Check 12: misc-include-cleaner (DESHABILITADO temporalmente - requiere refactorización masiva de includes)
  - -misc-include-cleaner

WarningsAsErrors: '*'
# No usar HeaderFilterRegex - usamos .clang-tidy local en source/core/audio/ para excluir
FormatStyle: file

CheckOptions:
  # Variables locales en snake_case
  - { key: readability-identifier-naming.VariableCase, value: lower_case }

  # Miembros privados en snake_case con sufijo _
  - { key: readability-identifier-naming.PrivateMemberCase, value: lower_case }
  - { key: readability-identifier-naming.PrivateMemberSuffix, value: _ }

  # Miembros protegidos en snake_case con sufijo _
  - { key: readability-identifier-naming.ProtectedMemberCase, value: lower_case }
  - { key: readability-identifier-naming.ProtectedMemberSuffix, value: _ }

  # Miembros públicos en snake_case (sin sufijo)
  - { key: readability-identifier-naming.PublicMemberCase, value: lower_case }

  # Namespaces en CamelCase
  - { key: readability-identifier-naming.NamespaceCase, value: CamelCase }

  # Variables estáticas privadas como miembros privados
  - { key: readability-identifier-naming.StaticVariableCase, value: lower_case }
  - { key: readability-identifier-naming.StaticVariableSuffix, value: _ }
  
  # Constantes estáticas sin sufijo
  - { key: readability-identifier-naming.StaticConstantCase, value: UPPER_CASE }

  # Constantes globales en UPPER_CASE
  - { key: readability-identifier-naming.GlobalConstantCase, value: UPPER_CASE }

  # Variables constexpr globales en UPPER_CASE
  - { key: readability-identifier-naming.ConstexprVariableCase, value: UPPER_CASE }

  # Constantes locales en UPPER_CASE
  - { key: readability-identifier-naming.LocalConstantCase, value: UPPER_CASE }

  # Constexpr miembros en UPPER_CASE (sin sufijo)
  - { key: readability-identifier-naming.ConstexprMemberCase, value: UPPER_CASE }

  # Constexpr miembros privados/protegidos con sufijo _
  - { key: readability-identifier-naming.ConstexprMethodCase, value: UPPER_CASE }

  # Clases, structs y enums en CamelCase
  - { key: readability-identifier-naming.ClassCase, value: CamelCase }
  - { key: readability-identifier-naming.StructCase, value: CamelCase }
  - { key: readability-identifier-naming.EnumCase, value: CamelCase }

  # Valores de enums en UPPER_CASE
  - { key: readability-identifier-naming.EnumConstantCase, value: UPPER_CASE }

  # Métodos en camelBack (sin sufijos)
  - { key: readability-identifier-naming.MethodCase, value: camelBack }
  - { key: readability-identifier-naming.PrivateMethodCase, value: camelBack }
  - { key: readability-identifier-naming.ProtectedMethodCase, value: camelBack }
  - { key: readability-identifier-naming.PublicMethodCase, value: camelBack }

  # Funciones en camelBack
  - { key: readability-identifier-naming.FunctionCase, value: camelBack }

  # Parámetros en lower_case
  - { key: readability-identifier-naming.ParameterCase, value: lower_case }

  # misc-include-cleaner: Ignorar SDL (genera falsos positivos)
  - { key: misc-include-cleaner.IgnoreHeaders, value: 'SDL3/.*' }
