#![no_std]

use libtock::ble_composer;
use libtock::ble_composer::BlePayload;
use libtock::result::TockResult;
use libtock::simple_ble::BleAdvertisingDriver;
use libtock::timer::Duration;
use serde::Serialize;

libtock_core::stack_size! {0x800}

#[derive(Serialize)]
struct LedCommand {
    pub nr: u8,
    pub st: bool,
}

#[libtock::main]
async fn main() -> TockResult<()> {
    let mut drivers = libtock::retrieve_drivers()?;
    let leds_driver = drivers.leds.init_driver()?;
    let mut timer_driver = drivers.timer.create_timer_driver();
    let timer_driver = timer_driver.activate()?;
    let mut ble_advertising_driver = drivers.ble_advertising.create_driver();

    let led = leds_driver.leds().next().unwrap();

    let uuid: [u8; 2] = [0x00, 0x18];

    let payload = corepack::to_bytes(LedCommand { nr: 2, st: true }).unwrap();

    let mut buffer = BleAdvertisingDriver::create_advertising_buffer();
    let mut gap_payload = BlePayload::default();

    gap_payload
        .add_flag(ble_composer::flags::LE_GENERAL_DISCOVERABLE)
        .unwrap();

    gap_payload
        .add(ble_composer::gap_types::UUID, &uuid)
        .unwrap();

    gap_payload
        .add(ble_composer::gap_types::COMPLETE_LOCAL_NAME, b"Tock!")
        .unwrap();

    gap_payload.add_service_payload([91, 79], &payload).unwrap();

    let _handle = ble_advertising_driver.initialize(100, &gap_payload, &mut buffer);

    loop {
        led.on()?;
        timer_driver.sleep(Duration::from_ms(500)).await?;
        led.off()?;
        timer_driver.sleep(Duration::from_ms(500)).await?;
    }
}
