ccd-cli 1.0.0-alpha.9

Bootstrap and validate Continuous Context Development repositories
use std::process::ExitCode;

use anyhow::Result;

use crate::commands;
use crate::output::{self, OutputFormat};
use crate::paths;

pub(crate) fn dispatch(command: crate::PodCommand, format: OutputFormat) -> Result<ExitCode> {
    match command {
        crate::PodCommand::Init(args) => {
            let repo_path = paths::cli::resolve(&args.path)?;
            let report =
                commands::pod::init(&repo_path, args.profile.as_deref(), &args.name, args.force)?;
            output::render_report(format, &report)
        }
        crate::PodCommand::List => {
            let report = commands::pod::list()?;
            output::render_report(format, &report)
        }
        crate::PodCommand::Status(args) => {
            let repo_path = args
                .path
                .as_ref()
                .map(|path| paths::cli::resolve(path))
                .transpose()?;
            let report = commands::pod::status(
                args.name.as_deref(),
                repo_path.as_deref(),
                args.profile.as_deref(),
            )?;
            output::render_report(format, &report)
        }
        crate::PodCommand::MigrateDefaults(args) => {
            let repo_path = paths::cli::resolve(&args.path)?;
            let report = crate::memory::pod_migration::run(
                &repo_path,
                args.profile.as_deref(),
                &args.memory_items,
                &args.policy_items,
                args.adopt_suggested,
                args.write,
            )?;
            output::render_report(format, &report)
        }
    }
}