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

#[derive(Parser)]
#[command(name = "olla", about = "Couteau suisse local : réseau, domotique, déploiement, et plus.")]
pub struct Cli {
    #[command(subcommand)]
    pub command: Commands,
}

#[derive(Clone, Copy, ValueEnum)]
pub enum Site {
    #[value(name = "dev.olla.fr")]
    DevOllaFr,
}

impl Site {
    pub fn build_dir(&self) -> &'static str {
        match self {
            Site::DevOllaFr => "build/dev.olla.fr",
        }
    }

    pub fn deploy_target(&self) -> &'static str {
        match self {
            Site::DevOllaFr => "dev.olla.fr:/var/www/dev.olla.fr/",
        }
    }
}

#[derive(Subcommand)]
pub enum Commands {
    /// Navigation entre les bureaux bspwm
    #[command(subcommand)]
    Desktop(DesktopCommands),
    /// Lancer le mode développement (build + watch + serve)
    Dev { site: Site },
    /// Déployer un site (build + rsync)
    Deploy { site: Site },
}

#[derive(Subcommand)]
pub enum DesktopCommands {
    /// Aller à gauche (Mail→Web, Code→Term)
    Left,
    /// Aller à droite (Web→Mail, Term→Code)
    Right,
    /// Aller en haut (Term→Web, Code→Mail)
    Up,
    /// Aller en bas (Web→Term, Mail→Code)
    Down,
    /// Basculer vers/depuis Others
    Others,
}
