use std::convert::{TryFrom, Into};


#[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize, enum_utils::FromStr, derive_more::Display)]
pub enum UnitType {
    None
}

impl UnitType {
    pub fn value(&self) -> [u8; 3] {
        match self {
            UnitType::None => [0; 3]
        }
    }
}

#[derive(Debug, Copy, Clone, PartialEq)]
pub enum UnitModifier {
    PlusPlus,
    Plus,
    Minus,
    MinusMinus,
}

#[derive(Debug, Copy, Clone, PartialEq)]
pub struct Unit {
    pub unit: UnitType,
    pub modifier: UnitModifier,
}


impl Unit {
    pub fn as_bytes(&self) -> [u8; 16] {
        let mut result = [0; 16];
        result[0..3].copy_from_slice(&self.unit.value());

        match self.modifier {
            UnitModifier::PlusPlus => {
                result[7] = 3;
            },
            UnitModifier::Plus => {
                result[7] = 1;
            },
            UnitModifier::Minus => {
                result[7] = 0xFF;
                result[8] = 0xFF;
            },
            UnitModifier::MinusMinus => {
                result[7] = 0xFE;
                result[8] = 0xFF;
            },
        }

        result
    }
}