use std::{
    fs::File,
    io::{Read, Write},
};

use getrandom::getrandom;

use crate::chip8::Chip8;

pub fn read_file(path: &str) -> Vec<u8> {
    let mut file = File::open(path).unwrap();
    let mut data = Vec::new();
    file.read_to_end(&mut data).unwrap();
    data
}

pub fn random() -> u8 {
    let mut n = [0];
    getrandom(&mut n).unwrap();
    n[0]
}

/// Saves a snapshot image of the provided machine
/// so that it can be latter loaded and RAM restored.
pub fn save_snapshot(name: &str, chip8: &Box<dyn Chip8>) {
    let mut file = File::create(name).unwrap();
    let state = chip8.get_state();
    let buffer = state.as_slice();
    file.write(buffer).unwrap();
}

pub fn take_snapshot(chip8: &Box<dyn Chip8>) {
    save_snapshot("out.sv8", chip8);
}