package git

import (
	"context"
	"strings"
)

// Commit 在 dir 创建一个提交。addAll=true 时先 git add -A。返回 commit sha。
//
// 提交者用 git config 在仓库内继承（应用启动时不全局设 user.name；调用方在
// 创建 main worktree 后会设置 service-level 的 user.name/email）。
func (r *DefaultRunner) Commit(ctx context.Context, dir, message string, addAll bool) (string, error) {
	ctx, cancel := withCtx(ctx, r.cfg.OpsTimeout)
	defer cancel()
	if addAll {
		if _, _, err := r.exec(ctx, dir, nil, "add", "-A"); err != nil {
			return "", err
		}
	}
	if _, _, err := r.exec(ctx, dir, nil, "commit", "-m", message); err != nil {
		return "", err
	}
	out, _, err := r.exec(ctx, dir, nil, "rev-parse", "HEAD")
	if err != nil {
		return "", err
	}
	return strings.TrimSpace(string(out)), nil
}
