const TURNKEY_SUBCOMMANDS = [
  'start',
  'onboard',
  'clarify',
  'design',
  'spec',
  'tdd',
  'develop',
  'test',
  'review',
  'ship',
];

function buildUsageMarkdown() {
  return [
    '# Turnkey Slash',
    '',
    'Usage:',
    '- `/turnkey start <ticket text>`',
    '- `/turnkey onboard`',
    '- `/turnkey clarify`',
    '- `/turnkey design`',
    '- `/turnkey spec`',
    '- `/turnkey tdd`',
    '- `/turnkey develop`',
    '- `/turnkey test`',
    '- `/turnkey review`',
    '- `/turnkey ship`',
    '- `/turnkey help`',
  ].join('\n');
}

function buildHelpResponse(content) {
  return {
    type: 'builtin',
    action: 'help',
    data: {
      content,
      format: 'markdown',
    },
  };
}

export function parseTurnkeySlashArgs(args = []) {
  const [subcommandRaw, ...rest] = Array.isArray(args) ? args : [];
  const subcommand = String(subcommandRaw || '').trim().toLowerCase();

  if (!subcommand || subcommand === 'help') {
    return { action: 'help' };
  }

  if (!TURNKEY_SUBCOMMANDS.includes(subcommand)) {
    return {
      action: 'help',
      error: `Unknown /turnkey action: \`${subcommand}\``,
    };
  }

  return {
    action: 'forward',
    subcommand,
    args: rest,
  };
}

export async function executeTurnkeySlashCommand(args = []) {
  const parsed = parseTurnkeySlashArgs(args);
  if (parsed.action === 'help') {
    const content = parsed.error
      ? `${parsed.error}\n\n${buildUsageMarkdown()}`
      : buildUsageMarkdown();
    return buildHelpResponse(content);
  }

  const forwarded = [`/turnkey:${parsed.subcommand}`, ...parsed.args]
    .join(' ')
    .trim();
  return {
    type: 'custom',
    content: forwarded,
    hasFileIncludes: false,
    hasBashCommands: false,
  };
}

export { buildUsageMarkdown as getTurnkeySlashUsage };