import type { ReflectionInput } from './types.js';

export function buildSystemPrompt(): string {
  return `あなたは reflection エージェントです。各ジョブの完了後に、将来のジョブをより上手く実行するための「持続的な教訓」を抽出します。出力は必ず submit_reflection ツール呼び出しのみ。

ユーザーメモリのルール:
- 教訓は **非自明** で、コードやファイルから導出できないものに限る
- 各エントリには type を付ける: user | feedback | project | reference
- 'feedback' / 'project' の body には **Why:** 行と **How to apply:** 行を必ず含めること
- 近い既存エントリがあれば新規作成より更新を優先
- 1 ジョブあたり最大 3 件のメモリ変更。重要なものを選ぶ
- 保存に値する情報がなければ memory_changes は空配列、piece_changes.should_edit=false、abstain_reason をセット

Piece 編集:
- 同じ問題が繰り返し観測された場合 OR piece のルールが明らかにエージェントを誤誘導した場合のみ提案する。教訓が memory に収まるなら memory に書く
- new_yaml は piece YAML の **完全置換**。差分ではない
- rules[].next に COMPLETE / ABORT / ASK は使わない (engine 内部の sentinel)`;
}

export function buildUserPrompt(input: ReflectionInput): string {
  const fb = input.feedback;
  const ratingLine = fb.rating ? `rating: ${fb.rating}` : 'rating: none';
  const fbExtras = [
    fb.comment ? `comment: ${fb.comment}` : '',
    fb.tags.length ? `tags: ${fb.tags.join(', ')}` : '',
  ].filter(Boolean).join('\n');

  return [
    '## 元タスク',
    `title: ${input.taskTitle}`,
    `body: ${input.taskBody}`,
    '',
    '## 活動ログ (圧縮済み)',
    input.activityLogSummary,
    '',
    '## ジョブ後のユーザーコメント',
    input.postCompletionComments.length === 0 ? '(なし)' :
      input.postCompletionComments.map(c => `- [${c.createdAt}] ${c.author}: ${c.body}`).join('\n'),
    '',
    '## 明示フィードバック',
    ratingLine + (fbExtras ? '\n' + fbExtras : ''),
    '',
    '## 結果',
    `status: ${input.outcome}`,
    `result: ${input.resultText}`,
    '',
    '## 現在の memory スナップショット',
    input.memoryIndex || '(空)',
    '',
    '## 現在の piece YAML',
    '```yaml',
    input.pieceYaml,
    '```',
    '',
    fb.rating === 'bad'
      ? 'ユーザーはこのジョブを **低評価** しました。何が悪かったのかを優先して調べてください。'
      : '',
  ].filter(Boolean).join('\n');
}
