const std = @import("std");
const microzig = @import("microzig");
const pico = microzig.hal;

const pin_config = pico.pins.GlobalConfiguration{
    .GPIO11 = .{ .name = "red", .function = .PWM5_B },
    .GPIO12 = .{ .name = "green", .function = .PWM6_A },
    .GPIO13 = .{ .name = "blue", .function = .PWM6_B },
};

const WRAP = 255;
const LOW = 0;
const HIGH = 255;
const SLEEP_MS = 500;

const pins = pin_config.pins();

pub fn main() void {
    pin_config.apply();

    var rand = std.Random.DefaultPrng.init(0);
    const rnd = rand.random();

    inline for (@typeInfo(@TypeOf(pins)).@"struct".fields) |field| {
        const slice = @field(pins, field.name).slice();
        slice.set_wrap(WRAP);
        slice.enable();
    }

    while (true) {
        inline for (@typeInfo(@TypeOf(pins)).@"struct".fields) |field| {
            @field(pins, field.name).set_level(rnd.uintAtMostBiased(u8, 255));
        }
        pico.time.sleep_ms(SLEEP_MS);
    }
}