use std::collections::HashSet;
use sfml::window::{Key, Event, mouse::Button};

pub struct Input {
    held_keys: HashSet<Key>,
    held_mouse: HashSet<u8>,
}

impl Input {
    pub fn new() -> Input {

        let mut key_container = HashSet::new();
        let mut mouse_container = HashSet::new();
        Input {
            held_keys: key_container,
            held_mouse: mouse_container,
        }
    }

    pub fn is_held(&self, key: Key) -> bool {
        self.held_keys.contains(&key)
    }

    pub fn is_mousebutton_held(&self, button: Button) -> bool {
        self.held_mouse.contains(&(button as u8))
    }

    pub fn ingest(&mut self, event: &Event) {
        match event {
            Event::KeyPressed { code, .. } => {
                self.held_keys.insert(code.clone());
            }
            Event::KeyReleased { code, .. } => {
                self.held_keys.remove(code);
            }
            Event::MouseButtonPressed { button, x, y } => {
                self.held_mouse.insert(button.clone() as u8);
            },
            Event::MouseButtonReleased { button, x, y } => {
                self.held_mouse.remove(&(button.clone() as u8));
            },
            _ => {}
        }
    }
}
