use alloc::vec::Vec;

/// Placeholder to be replaced with a proper FileReference when such a thing exists
pub type FileID = u8;
pub type SoundCardID = u8;
pub type DeviceID = u8;
pub type ControllerID = u8;

#[derive(Clone, Debug)]
pub enum FileAccess {
    All,
    Some(Vec<FileID>),
    None,
}

#[derive(Clone, Debug)]
pub enum ControllerAccess {
    All,
    Some(Vec<ControllerID>),
    None,
}

#[derive(Clone, Debug)]
pub enum SoundCardAccess {
    All,
    Some(Vec<SoundCardID>),
    None,
}

#[derive(Clone, Debug)]
pub enum MouseAccess {
    Yes,
    No,
}

#[derive(Clone, Debug)]
pub enum KeyboardAccess {
    Yes,
    No,
}

#[derive(Clone, Debug)]
pub struct Capabilities {
    files: FileAccess,
    mouse: MouseAccess,
    keyboard: KeyboardAccess,
    controllers: ControllerAccess,
    sound_cards: SoundCardAccess,
}

impl Capabilities {
    /// Generate a set of empty capabilities
    pub fn empty() -> Self {
        Self {
            files: FileAccess::None,
            mouse: MouseAccess::No,
            keyboard: KeyboardAccess::No,
            controllers: ControllerAccess::None,
            sound_cards: SoundCardAccess::None,
        }
    }
}


