/// 解析斜杠命令
/// 返回 (command_name, args) 或 None
pub fn parse_slash_command(content: &str) -> Option<(&str, &str)> {
    let trimmed = content.trim();
    if !trimmed.starts_with('/') {
        return None;
    }
    let rest = &trimmed[1..];
    if let Some((name, args)) = rest.split_once(' ') {
        Some((name, args.trim()))
    } else {
        Some((rest, ""))
    }
}

/// 检查内容是否匹配指定命令
pub fn command_matches(content: &str, aliases: &[&str]) -> bool {
    let trimmed = content.trim();
    aliases
        .iter()
        .any(|&alias| trimmed == alias || trimmed.starts_with(&format!("{} ", alias)))
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_parse_slash_command() {
        assert_eq!(parse_slash_command("/reset"), Some(("reset", "")));
        assert_eq!(parse_slash_command("/reset arg"), Some(("reset", "arg")));
        assert_eq!(
            parse_slash_command("/new hello world"),
            Some(("new", "hello world"))
        );
        assert_eq!(parse_slash_command("/??"), Some(("??", "")));
        assert_eq!(parse_slash_command("/? arg"), Some(("?", "arg")));
        assert_eq!(parse_slash_command("/?"), Some(("?", "")));
        assert_eq!(parse_slash_command("/help"), Some(("help", "")));
        assert_eq!(parse_slash_command("hello"), None);
        assert_eq!(parse_slash_command("/"), Some(("", "")));
    }

    #[test]
    fn test_command_matches() {
        let aliases = &["/reset", "/new"];
        assert!(command_matches("/reset", aliases));
        assert!(command_matches("/new", aliases));
        assert!(command_matches("/reset arg", aliases));
        assert!(!command_matches("/help", aliases));
        assert!(!command_matches("reset", aliases));
    }
}
