use failure::Fallible as Result;
use failure::err_msg;
use failure::Error;
use resiter::AndThen;
use resiter::IterInnerOkOrElse;
use libimagdiary::diary::Diary;
use libimagdiary::viewer::DiaryViewer;
use libimagrt::runtime::Runtime;
use libimagstore::iter::get::StoreIdGetIteratorExtension;
use libimagentryview::viewer::Viewer;
use crate::util::get_diary_name;
pub fn view(rt: &Runtime) -> Result<()> {
let diaryname = get_diary_name(rt).ok_or_else(|| err_msg("No diary name"))?;
let hdr = rt.cli().subcommand_matches("view").unwrap().is_present("show-header");
let out = rt.stdout();
let mut outlock = out.lock();
let viewer = DiaryViewer::new(hdr);
Diary::entries(rt.store(), &diaryname)?
.into_get_iter(rt.store())
.map_inner_ok_or_else(|| err_msg("Did not find one entry"))
.and_then_ok(|e| viewer.view_entry(&e, &mut outlock).map_err(Error::from).map(|_| e))
.and_then_ok(|e| rt.report_touched(e.get_location()).map_err(Error::from))
.collect()
}