jira-commands 0.4.0

Jira CLI — terminal client for Atlassian Jira
use anyhow::{Context, Result};
use clap::Subcommand;
use jira_core::JiraClient;

#[derive(Debug, Subcommand)]
pub enum PlanCommand {
    /// List Jira Plans (requires Jira Premium / Advanced Roadmaps)
    List,
}

pub async fn handle(cmd: PlanCommand, client: JiraClient) -> Result<()> {
    match cmd {
        PlanCommand::List => list_plans(client).await,
    }
}

async fn list_plans(client: JiraClient) -> Result<()> {
    let plans = client
        .get_plans()
        .await
        .context("Failed to fetch plans — this feature requires Jira Premium")?;

    if plans.is_empty() {
        println!("No plans found.");
        return Ok(());
    }

    println!("{:<8} {:<40} STATUS", "ID", "NAME");
    println!("{}", "".repeat(60));

    for plan in &plans {
        let id = plan.get("id").and_then(|v| v.as_u64()).unwrap_or(0);
        let name = plan
            .get("title")
            .or_else(|| plan.get("name"))
            .and_then(|v| v.as_str())
            .unwrap_or("");
        let status = plan.get("status").and_then(|v| v.as_str()).unwrap_or("");

        println!("{:<8} {:<40} {}", id, name, status);
    }

    Ok(())
}