mod standard_line_analyser;
mod standard_report_building;

pub use {
    standard_line_analyser::StandardLineAnalyzer,
    standard_report_building::build_report,
};

use {
    crate::*,
    anyhow::Result,
};

#[derive(Debug, Default)]
pub struct StandardAnalyzer {
    lines: Vec<CommandOutputLine>,
}

impl Analyzer for StandardAnalyzer {
    fn start(
        &mut self,
        _mission: &Mission,
    ) {
        self.lines.clear();
    }

    fn receive_line(
        &mut self,
        line: CommandOutputLine,
        command_output: &mut CommandOutput,
    ) {
        self.lines.push(line.clone());
        command_output.push(line);
    }

    fn build_report(&mut self) -> Result<Report> {
        let line_analyzer = StandardLineAnalyzer {};
        build_report(&self.lines, line_analyzer)
    }
}
