use std::io::{self, Read};
use virtual_display;

fn prompt_input() -> u8 {
    println!("Press  key          execute:");
    println!("       1. 'x'       1. exit");
    println!("       2. 'i'       2. install or update driver");
    println!("       3. 'u'       3. uninstall driver");
    println!("       4. 'c'       4. create device");
    println!("       5. 'd'       5. destroy device");
    println!("       6. '1'       6. plug in monitor 0,1,2");
    println!("       7. '4'       7. plug out monitor 0,1,2");

    io::stdin()
        .bytes()
        .next()
        .and_then(|result| result.ok())
        .unwrap_or(0)
}

fn plug_in() {
    println!("Plug in monitor begin");
    if let Err(e) = virtual_display::plug_in_monitor() {
        println!("{}", e);
    } else {
        println!("Plug in monitor done");
    }
}

fn plug_out() {
    println!("Plug out monitor begin");
    if let Err(e) = virtual_display::plug_out_monitor() {
        println!("{}", e);
    } else {
        println!("Plug out monitor done");
    }
}

fn main() {
    loop {
        match prompt_input() as char {
            'x' => break,
            'i' => {
                println!("Install or update driver begin");
                let mut reboot_required = false;
                if let Err(e) = virtual_display::install_update_driver(&mut reboot_required) {
                    println!("{}", e);
                } else {
                    println!(
                        "Install or update driver done, reboot is {} required",
                        if reboot_required { "" } else { "not" }
                    );
                }
            }
            'u' => {
                println!("Uninstall driver begin");
                let mut reboot_required = false;
                if let Err(e) = virtual_display::uninstall_driver(&mut reboot_required) {
                    println!("{}", e);
                } else {
                    println!(
                        "Uninstall driver done, reboot is {} required",
                        if reboot_required { "" } else { "not" }
                    );
                }
            }
            'c' => {
                println!("Create device begin");
                if virtual_display::is_device_created() {
                    println!("Device created before");
                    continue;
                }
                if let Err(e) = virtual_display::create_device() {
                    println!("{}", e);
                } else {
                    println!("Create device done");
                }
            }
            'd' => {
                println!("Close device begin");
                virtual_display::close_device();
                println!("Close device done");
            }
            '1' => plug_in(),
            '4' => plug_out(),
            _ => {}
        }
    }
}