Checks:
  - readability-*
  - modernize-*
  - performance-*
  - bugprone-unchecked-optional-access
  - bugprone-sizeof-expression
  - bugprone-suspicious-missing-comma
  - bugprone-suspicious-index
  - bugprone-undefined-memory-manipulation
  - bugprone-use-after-move
  - bugprone-out-of-bound-access
  - -readability-identifier-length
  - -readability-magic-numbers
  - -bugprone-narrowing-conversions
  - -performance-enum-size
  - -performance-inefficient-string-concatenation
  - -bugprone-integer-division
  - -bugprone-easily-swappable-parameters
  - -modernize-avoid-c-arrays,-warnings-as-errors

WarningsAsErrors: '*'
# Solo incluir archivos de tu código fuente (external tiene su propio .clang-tidy)
# Excluye jail_audio.hpp del análisis
HeaderFilterRegex: 'source/(?!core/audio/jail_audio\.hpp|core/rendering/sdl3gpu/.*_spv\.h).*'
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 }
