# Club12 Backend — .editorconfig
#
# Codifies conventions the codebase already follows consistently (verified 2026-09-05
# by sampling across Domain/Application/Infrastructure/API), not aspirational new rules.
# One exception was found and deliberately left out below: const-field casing is mixed
# in practice (PascalCase almost everywhere, but Application/Utils/Constants/Stage/MaxTeams.cs
# uses SCREAMING_SNAKE_CASE) — picking a side wasn't part of this task, so no naming rule
# is enforced for constants here.

root = true

[*]
charset = utf-8
end_of_line = crlf
indent_style = space
indent_size = 4
insert_final_newline = true
trim_trailing_whitespace = true

[*.cs]
charset = utf-8-bom

# Allman braces (opening brace on its own line) — the only style seen in this codebase.
csharp_new_line_before_open_brace = all
csharp_new_line_before_else = true
csharp_new_line_before_catch = true
csharp_new_line_before_finally = true

# File-scoped namespaces are used everywhere.
csharp_style_namespace_declarations = file_scoped:warning

# Explicit types are used almost everywhere (`var` appears once in the whole backend) —
# this is a deliberate house style, not an oversight.
csharp_style_var_for_built_in_types = false:suggestion
csharp_style_var_when_type_is_apparent = false:suggestion
csharp_style_var_elsewhere = false:suggestion

# Plain alphabetical using order — System is not special-cased to the top.
dotnet_sort_system_directives_first = false
dotnet_separate_import_directive_groups = false

# Primary constructors are the established pattern for services/repositories with DI.
csharp_style_prefer_primary_constructors = true:suggestion

[*.{json,yml,yaml}]
indent_size = 2

[*.{csproj,props,targets}]
indent_size = 2

# Naming: interfaces and private fields — both 100% consistent across the sampled codebase.
dotnet_naming_rule.interface_should_be_prefixed_with_i.severity = warning
dotnet_naming_rule.interface_should_be_prefixed_with_i.symbols = interface_type
dotnet_naming_rule.interface_should_be_prefixed_with_i.style = prefix_i

dotnet_naming_symbols.interface_type.applicable_kinds = interface
dotnet_naming_symbols.interface_type.applicable_accessibilities = *

dotnet_naming_style.prefix_i.required_prefix = I
dotnet_naming_style.prefix_i.capitalization = pascal_case

dotnet_naming_rule.private_field_should_be_camel_case_with_underscore.severity = warning
dotnet_naming_rule.private_field_should_be_camel_case_with_underscore.symbols = private_field
dotnet_naming_rule.private_field_should_be_camel_case_with_underscore.style = underscore_camel_case

dotnet_naming_symbols.private_field.applicable_kinds = field
dotnet_naming_symbols.private_field.applicable_accessibilities = private

dotnet_naming_style.underscore_camel_case.required_prefix = _
dotnet_naming_style.underscore_camel_case.capitalization = camel_case
