use std::io::Write;
use anyhow::{bail, Context, Result};
use doiget_core::store::{render, FsStore, Store};
use doiget_core::Ref;
use super::resolve_store_root;
pub fn run(input: String) -> Result<()> {
let ref_ = Ref::parse(&input).with_context(|| format!("invalid ref: {input}"))?;
let safekey = ref_.safekey();
let store_root = resolve_store_root()?;
let store = FsStore::new(store_root)?;
let metadata = store
.read(&safekey)
.with_context(|| format!("failed to read store entry for {input}"))?;
match metadata {
Some(m) => {
let bib = render::to_bibtex(safekey.as_str(), &m);
let stdout = std::io::stdout();
let mut out = stdout.lock();
write!(out, "{bib}").context("failed to write BibTeX entry to stdout")?;
Ok(())
}
None => bail!("no entry for {input}"),
}
}