use std::{env, fs::File, io::Write, path::Path};

use bitvec::{order::Msb0, vec::BitVec};
use image::{GenericImageView, ImageReader};

// Example custom build script.
fn main() {
    println!("cargo::rerun-if-changed=build.rs");

    handle_image("duck");
}

fn handle_image(name: &str) {
    println!("cargo::rerun-if-changed=src/assets/{name}.png");

    let img = ImageReader::open(format!("src/assets/{name}.png"))
        .unwrap()
        .decode()
        .unwrap();

    assert_eq!(img.width(), 96);
    assert_eq!(img.height(), 38);

    let mut out: BitVec<u8, Msb0> = BitVec::new();

    for y in 0..img.height() {
        for x in 0..img.width() {
            let p = img.get_pixel(x, y);
            let on = match (p.0[0], p.0[1], p.0[2]) {
                (0, 0, 0) => true,
                (255, 255, 255) => false,
                (r, g, b) => panic!("Invalid pixel at ({x}, {y}): ({r}, {g}, {b})"),
            };

            out.push(on);
        }
    }

    let out_dir = env::var("OUT_DIR").unwrap();

    let mut f = File::create(Path::new(&out_dir).join(format!("{name}.bin"))).unwrap();
    f.write_all(&out.as_raw_slice()).unwrap();
}