use crate::{codec::Codec, define::EncoderAACConfig};
use anyhow::{Result, bail};
use std::pin::Pin;
use th_rs::define::TH_ESStreamInfo;

pub struct EncoderAAC {
    codec: Pin<Box<Codec>>,
}
impl EncoderAAC {
    pub fn new(config: EncoderAACConfig) -> Result<Pin<Box<Self>>> {
        let pin_obj = Box::pin(Self {
            codec: Codec::new(config)?,
        });

        Ok(pin_obj)
    }
    pub fn write<'a>(self: &'a mut Pin<Box<Self>>, data: &[u8], info: &TH_ESStreamInfo) -> Result<&'a [u8]> {
        let o_packet = self.codec.write(data, info)?;
        match o_packet {
            Some(packet) => Ok(packet.core().payload()),
            None => bail!("Continue input"),
        }
    }
}