use std::path::PathBuf;

use clap::{ArgAction, Parser, Subcommand};

/// An automatic lf cd mapping generator
#[derive(Parser, Debug)]
#[clap(author, version, about, long_about = None)]
#[command(next_line_help = true)]
pub struct Args {
    /// The directory to treat as home
    #[arg(long, short = 'n', env = "HOME")]
    pub home_name: PathBuf,

    /// The number of directories to generate mappings for, starting from each `relevant_directory`
    #[arg(long, short, default_value = "2")]
    pub depth: usize,

    /// Increase message verbosity
    #[arg(long="verbose", short = 'v', action = ArgAction::Count)]
    pub verbosity: u8,

    /// Silence all output
    #[arg(long, short = 'q')]
    pub quiet: bool,

    #[command(subcommand)]
    pub command: Command,
}

#[derive(Subcommand, Debug)]
pub enum Command {
    /// Visualize the generated mappings in a tree
    Visualize {
        #[command(flatten)]
        options: CommandOptions,
    },

    /// Output the generated mappings in a format suitable for the lf config file
    Generate {
        #[command(flatten)]
        options: CommandOptions,
    },
}

#[derive(Debug, Parser)]
pub struct CommandOptions {
    /// The directories to generate mappings for
    pub relevant_directories: Vec<PathBuf>,
}