sara-tasks 2.7.5

Sara — folder-aware task manager
use anyhow::Result;
use rusqlite::Connection;

use crate::infrastructure::config::Config;
use crate::infrastructure::project::project_identity_for_dir;

mod render;

fn resolve_name(cfg: &Config, override_name: Option<&str>) -> Result<String> {
    if let Some(name) = override_name {
        return Ok(name.to_string());
    }
    let cwd = std::env::current_dir()?;
    let (name, _path) = project_identity_for_dir(&cwd, cfg);
    Ok(name)
}

pub fn run(
    conn: &mut Connection,
    cfg: &Config,
    project_override: Option<&str>,
    yes: bool,
) -> Result<()> {
    let name = resolve_name(cfg, project_override)?;
    let task_count = crate::infrastructure::db::count_project_tasks(conn, &name)?;
    let profile = crate::infrastructure::db::get_project(conn, &name)?;

    if task_count == 0 && profile.is_none() {
        render::print_nothing_to_reset(&name);
        return Ok(());
    }

    if !yes && !render::confirm(&name, task_count)? {
        render::print_aborted();
        return Ok(());
    }

    let deleted = crate::infrastructure::db::reset_project(conn, &name)?;
    render::print_reset(&name, deleted);
    Ok(())
}