1use clap::{Parser, Subcommand, ValueEnum};
2use std::path::PathBuf;
3
4#[derive(Debug, Clone, ValueEnum)]
5pub enum OutputFormat {
6 Text,
7 Html,
8 Json,
9}
10
11#[derive(Debug, Clone, ValueEnum)]
12pub enum GroupBy {
13 Day,
14 Month,
15}
16
17#[derive(Parser, Debug)]
18#[command(
19 name = "cc-token-usage",
20 version,
21 about = "Analyze Claude Code session token usage, costs, and efficiency"
22)]
23pub struct Cli {
24 #[arg(long, value_enum, global = true)]
26 pub format: Option<OutputFormat>,
27
28 #[arg(long, global = true)]
30 pub output: Option<PathBuf>,
31
32 #[arg(long, global = true)]
34 pub claude_home: Option<PathBuf>,
35
36 #[arg(long, global = true)]
38 pub subscription_price: Option<f64>,
39
40 #[arg(long, global = true)]
42 pub config: Option<PathBuf>,
43
44 #[command(subcommand)]
45 pub command: Option<Command>,
46}
47
48#[derive(Subcommand, Debug)]
49pub enum Command {
50 Overview,
52
53 Project {
55 #[arg(long, allow_hyphen_values = true)]
57 name: Option<String>,
58
59 #[arg(long, default_value_t = 10)]
61 top: usize,
62 },
63
64 Session {
66 id: Option<String>,
68
69 #[arg(long)]
71 latest: bool,
72 },
73
74 Validate {
76 id: Option<String>,
78
79 #[arg(long)]
81 failures_only: bool,
82 },
83
84 Update {
86 #[arg(long)]
88 check: bool,
89 },
90
91 Trend {
93 #[arg(long, default_value_t = 0)]
95 days: u32,
96
97 #[arg(long, value_enum, default_value_t = GroupBy::Day)]
99 group_by: GroupBy,
100 },
101
102 Wrapped {
104 #[arg(long)]
106 year: Option<i32>,
107 },
108
109 Heatmap {
111 #[arg(long, default_value_t = 365)]
113 days: u32,
114 },
115}