use clap::{Args, Parser, Subcommand};
#[cfg(feature = "server")]
use super::ServeArgs;
use super::{BilibiliCommand, DouyinCommand, KuaishouCommand, TwitterCommand, XiaohongshuCommand};
use crate::cli::i18n::CliLanguage;
use crate::config::{LogFormat, LogLevel, OutputFormat};
#[derive(Debug, Parser)]
#[command(
name = crate::APP_NAME,
version,
about = "Rust SDK + CLI + Web API service for multi-platform social web adapters",
long_about = None
)]
pub struct Cli {
#[arg(long, global = true, env = "AMAGI_LANG", value_name = "LANG")]
pub lang: Option<CliLanguage>,
#[arg(long, global = true, value_enum, default_value_t = OutputFormat::Text)]
pub output: OutputFormat,
#[arg(
long = "output-file",
short = 'o',
global = true,
env = "AMAGI_OUTPUT_FILE"
)]
pub output_file: Option<String>,
#[arg(
long = "pretty",
global = true,
env = "AMAGI_OUTPUT_PRETTY",
default_value_t = false
)]
pub pretty: bool,
#[arg(
long = "append",
global = true,
env = "AMAGI_OUTPUT_APPEND",
default_value_t = false
)]
pub append: bool,
#[arg(
long = "create-parent-dirs",
global = true,
env = "AMAGI_OUTPUT_CREATE_DIRS",
default_value_t = false
)]
pub create_parent_dirs: bool,
#[arg(long = "douyin-cookie", global = true, env = "AMAGI_DOUYIN_COOKIE")]
pub douyin_cookie: Option<String>,
#[arg(long = "bilibili-cookie", global = true, env = "AMAGI_BILIBILI_COOKIE")]
pub bilibili_cookie: Option<String>,
#[arg(long = "kuaishou-cookie", global = true, env = "AMAGI_KUAISHOU_COOKIE")]
pub kuaishou_cookie: Option<String>,
#[arg(
long = "xiaohongshu-cookie",
global = true,
env = "AMAGI_XIAOHONGSHU_COOKIE"
)]
pub xiaohongshu_cookie: Option<String>,
#[arg(long = "twitter-cookie", global = true, env = "AMAGI_TWITTER_COOKIE")]
pub twitter_cookie: Option<String>,
#[arg(
long = "timeout-ms",
global = true,
env = "AMAGI_TIMEOUT_MS",
default_value_t = 10_000
)]
pub timeout_ms: u64,
#[arg(
long = "max-retries",
global = true,
env = "AMAGI_MAX_RETRIES",
default_value_t = 3
)]
pub max_retries: u32,
#[arg(
long = "log-format",
global = true,
env = "AMAGI_LOG_FORMAT",
value_enum,
default_value_t = LogFormat::Text
)]
pub log_format: LogFormat,
#[arg(
long = "log-level",
global = true,
env = "AMAGI_LOG",
value_enum,
default_value_t = LogLevel::Info
)]
pub log_level: LogLevel,
#[command(subcommand)]
pub command: Option<Command>,
}
#[derive(Debug, Subcommand)]
pub enum Command {
Run(RunArgs),
#[cfg(feature = "server")]
Serve(ServeArgs),
}
#[derive(Debug, Args, Clone, Default)]
pub struct RunArgs {
#[arg(long, default_value_t = false)]
pub quiet: bool,
#[command(subcommand)]
pub task: Option<RunTaskArgs>,
}
#[derive(Debug, Subcommand, Clone)]
pub enum RunTaskArgs {
Bilibili(BilibiliArgs),
Douyin(DouyinArgs),
Kuaishou(KuaishouArgs),
Twitter(TwitterArgs),
Xiaohongshu(XiaohongshuArgs),
}
#[derive(Debug, Args, Clone)]
pub struct BilibiliArgs {
#[command(subcommand)]
pub command: BilibiliCommand,
}
#[derive(Debug, Args, Clone)]
pub struct DouyinArgs {
#[command(subcommand)]
pub command: DouyinCommand,
}
#[derive(Debug, Args, Clone)]
pub struct KuaishouArgs {
#[command(subcommand)]
pub command: KuaishouCommand,
}
#[derive(Debug, Args, Clone)]
pub struct XiaohongshuArgs {
#[command(subcommand)]
pub command: XiaohongshuCommand,
}
#[derive(Debug, Args, Clone)]
pub struct TwitterArgs {
#[command(subcommand)]
pub command: TwitterCommand,
}