use super::RULE;

#[test]
fn test_detect_main_with_script_path_parameter() {
    RULE.assert_detects(
        r#"
def main [handler_path: string] {
  let result = (^$handler_path "arg1" | complete)
  print $result
}
"#,
    );
}

#[test]
fn test_detect_main_with_any_type_used_as_command() {
    RULE.assert_detects(
        r"
def main [cmd] {
  let output = (^$cmd --version | complete)
  print $output
}
",
    );
}

#[test]
fn test_detect_main_with_multiple_params_external_usage() {
    RULE.assert_detects(
        r#"
def main [
  handler_path: string
  profile: string
] {
  print $"<6>Profile changed to '($profile)'"
  
  try {
    let result = (^$handler_path $profile | complete)
    if $result.exit_code != 0 {
      print $"<3>Error: Handler exited with code ($result.exit_code)"
    }
  } catch {|err|
    print $"<3>Error calling handler: ($err.msg)"
  }
}
"#,
    );
}

#[test]
fn test_detect_main_with_optional_script_parameter() {
    RULE.assert_detects(
        r"
def main [handler?: string] {
  if ($handler != null) {
    ^$handler
  }
}
",
    );
}

#[test]
fn test_detect_helper_function_with_script_parameter() {
    RULE.assert_detects(
        r"
def run-script [script_path: string] {
  ^$script_path
}
",
    );
}

#[test]
fn test_detect_multiple_custom_commands_with_script_params() {
    RULE.assert_detects(
        r#"
def run-backup [backup_script: string] {
  ^$backup_script --verbose
}

def cleanup [cleanup_tool: path] {
  ^$cleanup_tool /tmp
}

def main [] {
  print "Running tasks..."
}
"#,
    );
}
