'use strict';

const os = require('os');
const path = require('path');
const { execSync } = require('child_process');

function getTerminalType() {
  if (process.platform === 'win32') {
    if (process.env.PSModulePath || process.env.POWERSHELL_DISTRIBUTION_CHANNEL) return 'powershell';
    return 'cmd';
  }
  return 'terminal';
}

function getGitInfo(workspace) {
  try {
    const branch = execSync('git rev-parse --abbrev-ref HEAD', { cwd: workspace, stdio: ['ignore', 'pipe', 'ignore'] })
      .toString()
      .trim();
    if (!branch) return '未初始化';
    const status = execSync('git status --porcelain', { cwd: workspace, stdio: ['ignore', 'pipe', 'ignore'] })
      .toString()
      .trim();
    const dirty = status ? 'dirty' : 'clean';
    return `${branch} (${dirty})`;
  } catch (_) {
    return '未初始化';
  }
}

function buildSystemPrompt(basePrompt, opts) {
  const now = new Date();
  const tzOffset = now.getTimezoneOffset();
  const localMs = now.getTime() - tzOffset * 60 * 1000;
  const localIso = new Date(localMs).toISOString().slice(0, 16);
  const platform = os.platform();
  const systemName = platform === 'darwin' ? 'macos' : platform === 'win32' ? 'windows' : 'linux';
  let prompt = basePrompt;
  const allowModeValue = opts.allowMode === 'read_only'
    ? `${opts.allowMode}\n  已禁用 edit_file、run_command。若用户要求使用，请告知当前无权限需要用户输入 /allow 切换权限。`
    : opts.allowMode;
  const replacements = {
    current_time: localIso,
    path: opts.workspace,
    workspace: opts.workspace,
    system: `${systemName} (${os.release()})`,
    terminal: getTerminalType(),
    allow_mode: allowModeValue,
    permissions: allowModeValue,
    git: getGitInfo(opts.workspace),
    model_id: opts.modelId || '',
  };
  for (const [key, value] of Object.entries(replacements)) {
    const token = `{${key}}`;
    prompt = prompt.split(token).join(String(value));
  }
  return prompt.trim();
}

module.exports = { buildSystemPrompt };
