use camino::Utf8PathBuf;
use clap::Parser;

mod build;

#[derive(Debug, clap::Parser)]
pub enum SubCommand {
    Build(build::Args),
}

#[derive(Clone, Copy, Debug, clap::ValueEnum)]
pub enum ExtensionTarget {
    #[value(name = "vscode")]
    VisualStudioCode,
}

impl ExtensionTarget {
    pub fn name(&self) -> &str {
        match self {
            ExtensionTarget::VisualStudioCode => "vscode",
        }
    }

    pub fn base_path(&self, metadata: &cargo_metadata::Metadata) -> Utf8PathBuf {
        // TODO: get the workspace root
        let workspace_root = &metadata.workspace_root;
        assert!(workspace_root.exists());
        assert!(workspace_root.is_dir());

        let path = workspace_root.join("extensions").join(self.name());
        assert!(path.exists());
        assert!(path.is_dir());

        path
    }
}

fn main() -> Result<(), anyhow::Error> {
    let sub_command = SubCommand::parse();
    let metadata = cargo_metadata::MetadataCommand::new().exec()?;

    match sub_command {
        SubCommand::Build(args) => args.run(&metadata),
    }
}