#![no_std]

use futures::future;
use libtock::buttons;
use libtock::buttons::ButtonState;
use libtock::futures as libtock_futures;
use libtock::led;
use libtock::result::TockResult;
use libtock::timer;
use libtock::timer::Duration;

#[libtock::main]
async fn main() -> TockResult<()> {
    future::try_join(blink_periodically(), blink_on_button_press()).await?;
    Ok(())
}

async fn blink_periodically() -> TockResult<()> {
    let led = led::get(0).unwrap();
    loop {
        timer::sleep(Duration::from_ms(250)).await?;
        led.on()?;
        timer::sleep(Duration::from_ms(250)).await?;
        led.off()?;
    }
}

async fn blink_on_button_press() -> TockResult<()> {
    let mut with_callback = buttons::with_callback(|_, _| {});
    let mut buttons = with_callback.init()?;
    let mut button = buttons.iter_mut().next().unwrap();
    let button = button.enable()?;
    let led = led::get(1).unwrap();

    loop {
        libtock_futures::wait_until(|| button.read().ok() == Some(ButtonState::Released)).await;
        libtock_futures::wait_until(|| button.read().ok() == Some(ButtonState::Pressed)).await;
        led.on()?;
        libtock_futures::wait_until(|| button.read().ok() == Some(ButtonState::Released)).await;
        libtock_futures::wait_until(|| button.read().ok() == Some(ButtonState::Pressed)).await;
        led.off()?;
    }
}
