use anyhow::Result;
use std::fs;
use super::Outlet;
use super::summary_generator::{SummaryContentGenerator, SummaryDataCollector, SummaryMode};
use crate::generator::context::GeneratorContext;
pub struct SummaryOutlet {
full_file_path: String,
brief_file_path: String,
generate_both: bool,
}
impl SummaryOutlet {
pub fn new() -> Self {
Self {
full_file_path: "__Litho_Summary_Detail__.md".to_string(),
brief_file_path: "__Litho_Summary_Brief__.md".to_string(),
generate_both: true,
}
}
}
impl Outlet for SummaryOutlet {
async fn save(&self, context: &GeneratorContext) -> Result<()> {
let output_dir = &context.config.output_path;
if !output_dir.exists() {
fs::create_dir_all(output_dir)?;
}
println!("\n🖊️ 生成项目总结报告...");
let summary_data = SummaryDataCollector::collect_data(context).await?;
let full_content =
SummaryContentGenerator::generate_content(&summary_data, SummaryMode::Full);
let full_path = output_dir.join(&self.full_file_path);
fs::write(&full_path, full_content)?;
println!("💾 已保存完整版总结报告: {}", full_path.display());
if self.generate_both {
let brief_content =
SummaryContentGenerator::generate_content(&summary_data, SummaryMode::Brief);
let brief_path = output_dir.join(&self.brief_file_path);
fs::write(&brief_path, brief_content)?;
println!("💾 已保存摘要版总结报告: {}", brief_path.display());
}
Ok(())
}
}
impl Default for SummaryOutlet {
fn default() -> Self {
Self::new()
}
}