use std::{fs, path::PathBuf};
use config::read_config_file;
use copy::copy_markdown_file;
use filter::filter_markdown_files;
use crate::progress_bar::get_pb;
pub mod config;
pub mod copy;
pub mod filter;
pub mod frontmatter;
pub fn copy_markdown_files(
src_dir: &str,
dest_dir: &str,
config_file: Option<&str>,
include: Option<Vec<&str>>,
exclude: Option<Vec<&str>>,
) -> Result<(), Box<dyn std::error::Error>> {
let files: Vec<PathBuf> = fs::read_dir(src_dir)?
.filter_map(Result::ok)
.map(|entry| entry.path())
.collect();
let markdown_files = filter_markdown_files(files, include, exclude);
let frontmatter_config = if let Some(config_file) = config_file {
Some(read_config_file(config_file)?)
} else {
None
};
let file_length = markdown_files.len().try_into().unwrap();
let pb = get_pb(file_length);
for file in markdown_files {
let filename = file.file_name().unwrap().to_string_lossy().to_string();
pb.set_message(filename);
copy_markdown_file(dest_dir, &file, frontmatter_config.as_ref())?;
pb.inc(1)
}
pb.finish_with_message("Completed.");
Ok(())
}