use super::super::{CommandId, Request, SendError};

#[derive(Clone, Copy, Debug)]
pub struct HostStatusRequest {
    status_type: u8,
    status: u8,
}

impl HostStatusRequest {
    pub fn connected(connected: bool) -> Self {
        HostStatusRequest {
            status_type: 0,
            status: connected as u8,
        }
    }

    pub fn running(running: bool) -> Self {
        HostStatusRequest {
            status_type: 1,
            status: running as u8,
        }
    }
}

impl Request for HostStatusRequest {
    const COMMAND_ID: CommandId = CommandId::HostStatus;

    type Response = HostStatusResponse;

    fn to_bytes(&self, buffer: &mut [u8]) -> Result<usize, SendError> {
        buffer[0] = self.status_type;
        buffer[1] = self.status;
        Ok(2)
    }

    fn parse_response(&self, _buffer: &[u8]) -> Result<Self::Response, SendError> {
        Ok(HostStatusResponse)
    }
}

#[derive(Copy, Clone, Debug)]
pub struct HostStatusResponse;
