import type { GitCallbacks } from "@yaakapp-internal/git";
import { sync } from "../../init/sync";
import { promptCredentials } from "./credentials";
import { promptDivergedStrategy } from "./diverged";
import { addGitRemote } from "./showAddRemoteDialog";
import { promptUncommittedChangesStrategy } from "./uncommitted";

export function gitCallbacks(dir: string): GitCallbacks {
  return {
    addRemote: async () => {
      return addGitRemote(dir, "origin");
    },
    promptCredentials: async ({ url, error }) => {
      const creds = await promptCredentials({ url, error });
      if (creds == null) throw new Error("Cancelled credentials prompt");
      return creds;
    },
    promptDiverged: async ({ remote, branch }) => {
      return promptDivergedStrategy({ remote, branch });
    },
    promptUncommittedChanges: async () => {
      return promptUncommittedChangesStrategy();
    },
    forceSync: () => sync({ force: true }),
  };
}
