#![allow(dead_code)]
use crate::reader::*;
use crate::errors::*;
use enum_iterator::Sequence;
#[repr(u8)]
#[derive(Debug, PartialEq, Sequence, Clone, Copy)]
pub enum UemColor {
        Off = 0b000,
    Red = 0b001,
    Green = 0b010,
    Blue = 0b100,
    Yellow = 0b011,
    Magenta = 0b101,
    Cyan = 0b110,
    White = 0b111,
}
pub struct UemCommandsReader<'a> {
    reader: &'a UemReader,
}
pub trait UemCommandsReaderTrait {
    fn reader(&mut self) -> UemCommandsReader;
}
impl<'a> UemCommandsReader<'a> {
    pub(crate) fn new(rd: &'a UemReader) -> Self {
        UemCommandsReader {reader: rd}
    }
                                                                                                                        pub fn beep(&mut self, count: u8) -> UemResult {
        if count < 1 {
            return Err(UemError::IncorrectParameter);
        }
        let mut raw_reader = self.reader.lock().unwrap();
        raw_reader.send(&vec![0x05, count]).map(|_| ())
    }
                                                                                                                                            pub fn led(&mut self, count: u8, color: UemColor, post_color: UemColor) -> UemResult {
        let mut raw_reader = self.reader.lock().unwrap();
        raw_reader.send(&vec![0x07, color as u8, count, post_color as u8]).map(|_| ())
    }
                                                                                                                        pub fn power_radio(&mut self, on: bool) -> UemResult {
        let mut raw_reader = self.reader.lock().unwrap();
        match on {
            true => raw_reader.send(&vec![0x10]).map(|_| ()),
            false => raw_reader.send(&vec![0x04, 0x80, 0x01]).map(|_| ())
        }
    }
                                                                                                                                                    pub fn radio_off_on(&mut self, duration: u16) -> UemResult {
        let mut raw_reader = self.reader.lock().unwrap();
        raw_reader.send(&vec![0x05, 
            (duration & 0x00FF) as u8,
            ((duration & 0xFF00) >> 8) as u8]
        ).map(|_| ())
    }
                                                                                                                                pub fn get_version(&mut self) -> UemResultVec {
        let mut raw_reader = self.reader.lock().unwrap();
        raw_reader.send(&vec![0x64])
    }
                                                                                                                                pub fn get_serial(&mut self) -> UemResultVec {
        let mut raw_reader = self.reader.lock().unwrap();
        raw_reader.send(&vec![0x22])
    }
}