use super::{RuleConfigurability, RuleDefaultSeverity, RuleDefinition, RuleLanguage, RuleStatus};

pub(crate) const RULE_DEFINITIONS: &[RuleDefinition] = &[
    RuleDefinition {
        id: "deep_inheritance_hierarchy",
        language: RuleLanguage::Python,
        family: "structure",
        default_severity: RuleDefaultSeverity::Contextual,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "Repository-local Python class chains with unusually deep inheritance depth.",
        binding_location: super::bindings::PYTHON_STRUCTURE,
    },
    RuleDefinition {
        id: "eager_constructor_collaborators",
        language: RuleLanguage::Python,
        family: "structure",
        default_severity: RuleDefaultSeverity::Contextual,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "Constructors that instantiate several collaborators eagerly inside __init__.",
        binding_location: super::bindings::PYTHON_STRUCTURE,
    },
    RuleDefinition {
        id: "god_class",
        language: RuleLanguage::Python,
        family: "structure",
        default_severity: RuleDefaultSeverity::Contextual,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "Python classes that concentrate unusually high method count, public surface area, and mutable instance state.",
        binding_location: super::bindings::PYTHON_STRUCTURE,
    },
    RuleDefinition {
        id: "god_function",
        language: RuleLanguage::Python,
        family: "structure",
        default_severity: RuleDefaultSeverity::Contextual,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "Very large Python functions with high control-flow and call-surface concentration.",
        binding_location: super::bindings::PYTHON_STRUCTURE,
    },
    RuleDefinition {
        id: "mixed_concerns_function",
        language: RuleLanguage::Python,
        family: "structure",
        default_severity: RuleDefaultSeverity::Contextual,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "Functions that mix HTTP, persistence, and filesystem-style concerns in one body.",
        binding_location: super::bindings::PYTHON_STRUCTURE,
    },
    RuleDefinition {
        id: "monolithic_init_module",
        language: RuleLanguage::Python,
        family: "structure",
        default_severity: RuleDefaultSeverity::Contextual,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "__init__.py files that carry enough imports and behavior to look like monolithic modules.",
        binding_location: super::bindings::PYTHON_STRUCTURE,
    },
    RuleDefinition {
        id: "monolithic_module",
        language: RuleLanguage::Python,
        family: "structure",
        default_severity: RuleDefaultSeverity::Contextual,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "Non-__init__.py modules that are unusually large and combine many imports with orchestration-heavy behavior.",
        binding_location: super::bindings::PYTHON_STRUCTURE,
    },
    RuleDefinition {
        id: "name_responsibility_mismatch",
        language: RuleLanguage::Python,
        family: "structure",
        default_severity: RuleDefaultSeverity::Contextual,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "Read-style, transformation-style, or utility-style names that still perform mutation or own multiple infrastructure concerns.",
        binding_location: super::bindings::PYTHON_STRUCTURE,
    },
    RuleDefinition {
        id: "over_abstracted_wrapper",
        language: RuleLanguage::Python,
        family: "structure",
        default_severity: RuleDefaultSeverity::Contextual,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "Ceremonial wrapper-style or tiny data-container classes that add little beyond storing constructor state.",
        binding_location: super::bindings::PYTHON_STRUCTURE,
    },
    RuleDefinition {
        id: "tight_module_coupling",
        language: RuleLanguage::Python,
        family: "structure",
        default_severity: RuleDefaultSeverity::Contextual,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "Modules that depend on a large number of repository-local Python modules.",
        binding_location: super::bindings::PYTHON_STRUCTURE,
    },
    RuleDefinition {
        id: "too_many_instance_attributes",
        language: RuleLanguage::Python,
        family: "structure",
        default_severity: RuleDefaultSeverity::Contextual,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "Classes that assign an unusually large number of instance attributes across their methods.",
        binding_location: super::bindings::PYTHON_STRUCTURE,
    },
];
