// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

use anyhow::Result;
use fvdl_emulator_common::args::{Args, VDLCommand};
use fvdl_emulator_common::vdl_files::VDLFiles;

#[fuchsia_async::run_singlethreaded]
async fn main() -> Result<()> {
    let Args { command, sdk } = argh::from_env();
    Ok(process_command(command, sdk).await?)
}

async fn process_command(command: VDLCommand, is_sdk: bool) -> Result<()> {
    match command {
        VDLCommand::Start(start_command) => std::process::exit(
            VDLFiles::new(is_sdk, start_command.verbose)?.start_emulator(&start_command).await?,
        ),
        VDLCommand::Kill(stop_command) => {
            VDLFiles::new(is_sdk, false)?.stop_vdl(&stop_command).await?;
        }
    }
    Ok(())
}
