use crate::core::{Issue, Project, commit_to_branch};
use crate::error::Result;
use crate::storage::markdown::format_issue;
pub struct CreateArgs {
pub title: String,
pub epic: Option<String>,
pub body: Option<String>,
pub message: Option<String>,
pub depends_on: Vec<u32>,
}
pub fn run(args: CreateArgs) -> Result<()> {
let project = Project::discover()?;
let db = project.open_db()?;
let id = db.next_issue_id()?;
let mut issue = Issue::with_epic(id, args.epic);
issue.depends_on = args.depends_on;
let relative_path = Project::issue_relative_path(id, &issue.created);
let body = args.body.as_deref().unwrap_or("");
let content = format_issue(&issue, &args.title, body)?;
let commit_message = args
.message
.unwrap_or_else(|| format!("Create issue #{}: {}", id, args.title));
let data_branch = project
.config
.data_branch
.as_deref()
.unwrap_or("data/itack");
commit_to_branch(
&project.repo_root,
data_branch,
&relative_path,
content.as_bytes(),
&commit_message,
)?;
println!("Created issue #{}: {}", id, args.title);
Ok(())
}