use crate::codec::Codec;
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() -> Pin<Box<Self>> {
        let pin_obj = Box::pin(Self {
            codec: Codec::new("encoder-aac").expect("Init codec fail"),
        });

        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"),
        }
    }
}