use crate::Error;
use crate::dir_context::PathResolver;
use crate::runtime::Runtime;
use crate::script::aip_modules;
use crate::types::FileInfo;
use mlua::{IntoLua, Lua, Value};
use simple_fs::SPath;
use std::fs::write;
use std::path::Path;
pub(super) fn file_save_docx_to_md(
lua: &Lua,
runtime: &Runtime,
docx_path: String,
dest: Value,
) -> mlua::Result<Value> {
let dir_context = runtime.dir_context();
let rel_docx = SPath::new(docx_path.clone());
let full_docx = dir_context.resolve_path(runtime.session(), rel_docx.clone(), PathResolver::WksDir, None)?;
let md_content = crate::support::docx::docx_convert(Path::new(full_docx.as_str())).map_err(|e| {
Error::Custom(format!(
"Failed to convert DOCX file '{docx_path}' to Markdown.\nCause: {e}"
))
})?;
let (rel_md, full_md) = aip_modules::support::resolve_dest_path(lua, runtime, &rel_docx, dest, "md", None)?;
simple_fs::ensure_file_dir(&full_md).map_err(Error::from)?;
write(&full_md, md_content)
.map_err(|e| Error::Custom(format!("Failed to write Markdown file '{rel_md}'.\nCause: {e}")))?;
let meta = FileInfo::new(runtime.dir_context(), rel_md, &full_md);
meta.into_lua(lua)
}
pub(super) fn file_load_docx_as_md(lua: &Lua, runtime: &Runtime, docx_path: String) -> mlua::Result<Value> {
let dir_context = runtime.dir_context();
let rel_docx = SPath::new(docx_path.clone());
let full_docx = dir_context.resolve_path(runtime.session(), rel_docx, PathResolver::WksDir, None)?;
let md_content = crate::support::docx::docx_convert(Path::new(full_docx.as_str())).map_err(|e| {
Error::Custom(format!(
"Failed to convert DOCX file '{docx_path}' to Markdown.\nCause: {e}"
))
})?;
md_content.into_lua(lua)
}