use std::process::ExitCode;
use clap::Subcommand;
use crate::config::ResolvedContext;
use crate::output::OutputFormat;
pub mod admin;
pub mod agent;
pub mod alerts;
pub mod approvals;
pub mod audit;
pub mod budget;
pub mod completion;
pub mod config;
pub mod context;
pub mod cost;
pub mod dashboard;
pub mod gateway;
pub mod gw_probe;
pub mod logs;
pub mod permissions;
pub mod pidfile;
pub mod policy;
pub mod proxy;
pub mod sandbox;
pub mod start;
pub mod status;
pub mod stop;
pub mod topology;
pub mod trace;
pub mod version;
#[derive(Subcommand)]
pub enum Commands {
Admin(admin::AdminArgs),
Agent(agent::AgentArgs),
Alerts(alerts::AlertsArgs),
Audit(audit::AuditArgs),
Logs(logs::LogsArgs),
Policy(policy::PolicyArgs),
Context(context::ContextArgs),
Config(config::ConfigArgs),
Completion(completion::CompletionArgs),
Status(status::StatusArgs),
Version,
Trace(trace::TraceArgs),
Approvals(approvals::ApprovalsArgs),
Cost(cost::CostArgs),
Dashboard(dashboard::DashboardArgs),
Gateway(gateway::GatewayArgs),
Sandbox(sandbox::SandboxArgs),
Topology(topology::TopologyArgs),
Proxy(proxy::ProxyArgs),
Start(start::StartArgs),
Stop(stop::StopArgs),
}
pub fn dispatch(cmd: Commands, ctx: &ResolvedContext, output: OutputFormat) -> ExitCode {
match cmd {
Commands::Admin(args) => admin::dispatch(args, ctx, output),
Commands::Agent(args) => agent::dispatch(args, ctx, output),
Commands::Alerts(args) => alerts::dispatch(args, ctx, output),
Commands::Audit(args) => audit::dispatch(args, ctx, output),
Commands::Logs(args) => logs::dispatch(args, ctx),
Commands::Policy(args) => policy::dispatch(args, ctx, output),
Commands::Context(args) => context::dispatch(args),
Commands::Config(args) => config::dispatch(args),
Commands::Completion(args) => completion::run(args),
Commands::Status(args) => status::dispatch(args, ctx, output),
Commands::Version => version::run(ctx, output),
Commands::Trace(args) => trace::dispatch(args, ctx, output),
Commands::Approvals(args) => approvals::dispatch(args, ctx, output),
Commands::Cost(args) => cost::dispatch(args, ctx, output),
Commands::Dashboard(args) => dashboard::dispatch(args, ctx),
Commands::Gateway(args) => gateway::dispatch(args),
Commands::Sandbox(args) => sandbox::dispatch(args),
Commands::Topology(args) => topology::dispatch(args, ctx, output),
Commands::Proxy(args) => proxy::dispatch(args),
Commands::Start(args) => start::run(args),
Commands::Stop(args) => stop::run(args),
}
}