use anyhow::Result;
use tokmd_settings::ScanOptions;
use tokmd_types::{ChildIncludeMode, LangReceipt};
use crate::settings::{LangSettings, ScanSettings};
use crate::{InMemoryFile, build_lang_receipt};
use super::{
collect_pure_in_memory_rows, deterministic_in_memory_scan_options, scan_paths_or_current_dir,
settings_to_scan_options,
};
pub fn lang_workflow(scan: &ScanSettings, lang: &LangSettings) -> Result<LangReceipt> {
let scan_opts = settings_to_scan_options(scan);
let paths = scan_paths_or_current_dir(scan);
let languages = tokmd_scan::scan(&paths, &scan_opts)?;
let report = tokmd_model::create_lang_report(&languages, lang.top, lang.files, lang.children);
Ok(build_lang_receipt(&paths, &scan_opts, lang, report))
}
pub fn lang_workflow_from_inputs(
inputs: &[InMemoryFile],
scan_opts: &ScanOptions,
lang: &LangSettings,
) -> Result<LangReceipt> {
let scan_opts = deterministic_in_memory_scan_options(scan_opts);
let (paths, rows) =
collect_pure_in_memory_rows(inputs, &scan_opts, &[], 1, ChildIncludeMode::Separate)?;
let report =
tokmd_model::create_lang_report_from_rows(&rows, lang.top, lang.files, lang.children);
Ok(build_lang_receipt(&paths, &scan_opts, lang, report))
}