import {
  getGitForCwd
} from "./chunk-2UFQ3A3C.js";
import {
  createWuPaths
} from "./chunk-6HO4GWJE.js";
import {
  EMOJI,
  LOG_PREFIX,
  REMOTES,
  STDIO
} from "./chunk-DWMLTXKQ.js";
import {
  ErrorCodes,
  createError
} from "./chunk-RXRKBBSM.js";

// ../core/dist/wu-done-pr.js
import { execSync } from "child_process";
var WU_DONE_COMPLETION_MODES = Object.freeze({
  WORKTREE: "worktree",
  BRANCH_ONLY: "branch-only",
  BRANCH_PR: "branch-pr"
});
function isPRModeEnabled(doc, args) {
  const claimedMode = doc.claimed_mode || "worktree";
  const requiresReview = doc.requires_review === true;
  return claimedMode === "worktree-pr" || args.createPR || requiresReview;
}
function isGhCliAvailable() {
  try {
    execSync("gh --version", { encoding: "utf-8", stdio: STDIO.IGNORE });
    return true;
  } catch {
    return false;
  }
}
async function createPR(context) {
  const { branch, id, title, doc, draft = false } = context;
  console.log(`
${LOG_PREFIX.DONE} Creating PR for ${branch}...`);
  if (!isGhCliAvailable()) {
    printGhCliMissingMessage(branch, id);
    return { success: false, prUrl: null, ghAvailable: false };
  }
  try {
    await getGitForCwd().push(REMOTES.ORIGIN, branch);
  } catch (e) {
    throw createError(ErrorCodes.GIT_ERROR, `Failed to push branch ${branch}: ${e.message}`, {
      branch,
      operation: "push",
      originalError: e.message
    });
  }
  const body = buildPRBody(doc, id);
  const prTitle = `${id}: ${title}`;
  const draftFlag = draft ? "--draft" : "";
  try {
    const prUrl = execSync(`gh pr create --title ${JSON.stringify(prTitle)} --body ${JSON.stringify(body)} ${draftFlag} --head ${JSON.stringify(branch)} --base main`, { encoding: "utf-8" }).trim();
    console.log(`${LOG_PREFIX.DONE} ${EMOJI.SUCCESS} PR created: ${prUrl}`);
    return { success: true, prUrl, ghAvailable: true };
  } catch (e) {
    throw createError(ErrorCodes.GIT_ERROR, `Failed to create PR: ${e.message}`, {
      branch,
      id,
      operation: "pr-create",
      originalError: e.message
    });
  }
}
function buildPRBody(doc, id) {
  const paths = createWuPaths();
  const wuPath = paths.WU(id);
  const description = doc.description || doc.problem || "";
  const acceptance = doc.acceptance_criteria || doc.acceptance || {};
  let body = `## Summary

${description}

`;
  if (Object.keys(acceptance).length > 0) {
    body += `## Acceptance Criteria

`;
    for (const [key, criteria] of Object.entries(acceptance)) {
      body += `**${key}:**
`;
      if (Array.isArray(criteria)) {
        for (const item of criteria) {
          body += `- ${item}
`;
        }
      } else if (criteria && typeof criteria === "object") {
        for (const [subkey, items] of Object.entries(criteria)) {
          body += `- ${subkey}:
`;
          if (Array.isArray(items)) {
            for (const item of items) {
              body += `  - ${item}
`;
            }
          }
        }
      }
      body += `
`;
    }
  }
  body += `
\u{1F916} Generated with [Claude Code](https://claude.com/claude-code)

`;
  body += `WU YAML: ${wuPath}`;
  return body;
}
function printGhCliMissingMessage(branch, id) {
  console.error();
  console.error("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
  console.error("\u2551  GH CLI NOT AVAILABLE");
  console.error("\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563");
  console.error("\u2551  The gh CLI tool is required to create PRs.");
  console.error("\u2551");
  console.error("\u2551  Manual PR creation steps:");
  console.error(`\u2551  1. Push branch: git push origin ${branch}`);
  console.error("\u2551  2. Create PR in GitHub UI");
  console.error(`\u2551  3. After merge, run: pnpm wu:cleanup --id ${id}`);
  console.error("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D");
}
function printPRCreatedMessage(prUrl, id) {
  console.log("\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
  console.log("\u2551  PR CREATED - NEXT STEPS");
  console.log("\u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563");
  console.log(`\u2551  PR URL: ${prUrl}`);
  console.log("\u2551");
  console.log("\u2551  Next steps:");
  console.log("\u2551  1. Review the PR in GitHub UI");
  console.log("\u2551  2. Merge the PR when ready");
  console.log(`\u2551  3. Run cleanup: pnpm wu:cleanup --id ${id}`);
  console.log("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D");
}

export {
  WU_DONE_COMPLETION_MODES,
  isPRModeEnabled,
  isGhCliAvailable,
  createPR,
  buildPRBody,
  printGhCliMissingMessage,
  printPRCreatedMessage
};
