use std::path::Path;
use std::process::Command;

use crate::compare::sexp::sexp;

pub fn compare_parse_org_document<'a, C>(file_path: C) -> Result<String, Box<dyn std::error::Error>>
where
    C: AsRef<Path>,
{
    let org_sexp = emacs_parse_org_document(file_path)?;
    let parsed_sexp = sexp(org_sexp.as_str()).expect("Parse failure");
    todo!()
}

pub fn emacs_parse_org_document<'a, C>(file_path: C) -> Result<String, Box<dyn std::error::Error>>
where
    C: AsRef<Path>,
{
    let elisp_script = r#"(progn
     (org-mode)
     (message "%s" (pp-to-string (org-element-parse-buffer)))
)"#;
    let mut cmd = Command::new("emacs");
    let proc = cmd
        .arg("-q")
        .arg("--no-site-file")
        .arg("--no-splash")
        .arg("--batch")
        .arg("--insert")
        .arg(file_path.as_ref().as_os_str())
        .arg("--eval")
        .arg(elisp_script);
    let out = proc.output()?;
    out.status.exit_ok()?;
    let org_sexp = out.stderr;
    Ok(String::from_utf8(org_sexp)?)
}