* Copyright(c) 2024-2026 China Telecom Cloud Technologies Co., Ltd. All rights
* reserved. track-system is licensed under Mulan PSL v2. You can use this software
* according to the terms and conditions of the Mulan PSL V2. You may obtain a
* copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2.
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
* KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for
* more details.
*/
use anyhow::Result;
use clap::CommandFactory;
use track_system::cli::{Cli, CliExecutor};
use track_system::i18n::{apply_clap_i18n, apply_help_i18n, detect_lang_from_args, init_i18n};
use track_system::utils::load_track_system_env;
#[tokio::main]
async fn main() -> Result<()> {
load_track_system_env();
let raw_args: Vec<String> = std::env::args().collect();
let arg_lang = detect_lang_from_args(&raw_args);
let locale = init_i18n(arg_lang.as_deref());
let mut cmd = Cli::command();
apply_clap_i18n(&mut cmd, "track_cli");
apply_help_i18n(&mut cmd, "track_cli", &locale);
let matches = cmd.get_matches_from(raw_args);
let cli = <Cli as clap::FromArgMatches>::from_arg_matches(&matches).unwrap();
init_i18n(cli.lang.as_deref());
tracing_subscriber::fmt()
.with_env_filter(&cli.log_level)
.without_time()
.init();
let executor = CliExecutor::new()?;
executor.execute(cli).await?;
Ok(())
}