use super::literals::LiteralNode;

#[derive(Debug, Clone, PartialEq)]
pub enum PatternNode {
    Literal(LiteralNode),
    Identifier(String),
    Wildcard, // `_`

    EnumVariant {
        name: String,
        args: Vec<PatternNode>,
    },

    // Structural patterns for collections
    List {
        elements: Vec<PatternNode>,
        rest: Option<Box<PatternNode>>, // None = exact match, Some(..) = [a, b, ..rest]
    },
}

#[derive(Debug, Clone, PartialEq)]
pub struct MatchArm {
    pub pattern: PatternNode,
    pub guard: Option<super::nodes::ExpressionNode>,
    pub body: Vec<super::nodes::StatementNode>,
}
