use webcam::{Rig, Camera};
use pix::Raster;
use pix::rgb::SRgba8;

// Raster<SRgba8>

enum Event {
    // Rig has discovered a new camera.
    Camera(Camera),
    // 
    Picture((usize, ())),
}

struct State {
}

impl State {
    fn event(&mut self, event: Event) -> bool {
        match event {
            Event::Camera(_) => println!("New camera"),
            Event::Picture(_) => println!("Got picture"),
        }
        true
    }
}

// Asynchronous entry point.
async fn run() {
    let mut state = State {
        
    };
    let mut cams = Vec::<Camera>::new();
    let mut rig = Rig::new();
    while state.event(pasts::wait! {
        Event::Camera((&mut rig).await),
        Event::Picture(pasts::race!(cams)),
    }) {}
}

fn main() {
    pasts::block_on(run());
}

/*    let camera = Camera::new();


	void* output = NULL;
//	uint8_t output[640*480*3]; // RGB
	const char* error;
	int i;

	if((error = car_camera_init(&camera, 0, 640, 480, &output))) {
		printf("Error %s.\n", error);
		return 1;
	}
//	printf("Camera width and height: %dx%d\n", camera.w, camera.h);
	for(i = 0; i < 20; i++) {
		printf("getting a frame....\n");
		if((error = car_camera_loop(&camera))) {
			printf("Error %s.\n", error);
			return 1;
		}
	}
//	for(i = 0; i < 100; i++) printf("%d\n", output[i]);
	if((error = car_camera_kill(&camera))) {
		printf("Error %s.\n", error);
		return 1;
	}
	printf("Success!\n");
	return 0;
}*/