Documentation
use {
    super::{define, errors},
    crate::messages::define as message_define,
    byteorder::BigEndian,
    bytesio::bytes_reader::BytesReader,
};

pub struct EventMessagesReader {
    pub reader: BytesReader,
}

impl EventMessagesReader {
    pub fn new(reader: BytesReader) -> Self {
        Self { reader }
    }

    pub fn parse_event(
        &mut self,
    ) -> Result<message_define::RtmpMessageData, errors::EventMessagesError> {
        let event_type = self.reader.read_u16::<BigEndian>()?;
        match event_type {
            define::RTMP_EVENT_SET_BUFFER_LENGTH => {
                self.read_set_buffer_length()
            }

            define::RTMP_EVENT_STREAM_BEGIN => {
                self.read_stream_begin()
            }

            define::RTMP_EVENT_STREAM_IS_RECORDED => {
                self.read_stream_is_recorded()
            }

            _ => {
                Err(errors::EventMessagesError {
                    value: errors::EventMessagesErrorValue::UnknowEventMessageType,
                })
            }
        }
    }
    pub fn read_set_buffer_length(
        &mut self,
    ) -> Result<message_define::RtmpMessageData, errors::EventMessagesError> {
        let stream_id = self.reader.read_u32::<BigEndian>()?;
        let ms = self.reader.read_u32::<BigEndian>()?;

        Ok(message_define::RtmpMessageData::SetBufferLength {
            stream_id,
            buffer_length: ms,
        })
    }

    pub fn read_stream_begin(
        &mut self,
    ) -> Result<message_define::RtmpMessageData, errors::EventMessagesError> {
        let stream_id = self.reader.read_u32::<BigEndian>()?;

        Ok(message_define::RtmpMessageData::StreamBegin {
            stream_id,
        })
    }

    pub fn read_stream_is_recorded(
        &mut self,
    ) -> Result<message_define::RtmpMessageData, errors::EventMessagesError> {
        let stream_id = self.reader.read_u32::<BigEndian>()?;

        Ok(message_define::RtmpMessageData::StreamIsRecorded {
            stream_id,
        })
    }
}