//! CLI feature command tests

use anyhow::Result;
use std::process::Command;

#[test]
fn test_features_list_command() -> Result<()> {
    let temp_project = crate::create_test_project()?;
    let project_root = temp_project.path();

    // Create mock registry
    crate::helpers::create_mock_registry(project_root)?;

    // Test CLI command (this would require building the CLI)
    // For integration tests, we'd run the actual binary
    // let output = Command::new("cargo")
    //     .args(["run", "--bin", "cargo-rustelo", "--", "features", "list"])
    //     .current_dir(project_root)
    //     .output()?;

    // assert!(output.status.success());
    // assert!(String::from_utf8_lossy(&output.stdout).contains("test-analytics"));

    Ok(())
}

#[test]
fn test_feature_add_command() -> Result<()> {
    let temp_project = crate::create_test_project()?;
    let project_root = temp_project.path();

    // Create test feature
    let test_feature = crate::helpers::TestFeatureBuilder::new("test-feature")
        .with_dependency("serde")
        .with_env_var("TEST_VAR", "default", false);

    test_feature.create_in_project(project_root)?;

    // Test feature add command
    // This would run: cargo rustelo features add test-feature

    Ok(())
}

#[test]
fn test_feature_remove_command() -> Result<()> {
    let temp_project = crate::create_test_project()?;
    let project_root = temp_project.path();

    // First add a feature
    let test_feature = crate::helpers::TestFeatureBuilder::new("removable");
    test_feature.create_in_project(project_root)?;

    // Then test removal
    // This would run: cargo rustelo features remove removable

    Ok(())
}

#[test]
fn test_feature_status_command() -> Result<()> {
    let temp_project = crate::create_test_project()?;
    let project_root = temp_project.path();

    // Test status command
    // This would run: cargo rustelo features status

    Ok(())
}
