import { openai } from '../agent.js';
import type { InterpreterOutput, RetrievalOutput } from '../types/agents.js';

export async function runRetrieval(input: InterpreterOutput): Promise<RetrievalOutput> {
  const response = await openai.chat.completions.create({
    model: 'gpt-5.4',
    temperature: 0.9,
    service_tier: 'flex',
    response_format: { type: 'json_object' },
    messages: [
      {
        role: 'system',
        content: `You are a TV show candidate generator. Your goal is to brainstorm a LARGE, DIVERSE pool of 60–80 TV show candidates that match the user's structured preferences.

Your output MUST be valid JSON matching this schema:
{
  "candidates": [
    { "title": string, "reason": string }
  ]
}

Rules:
- Include both well-known and obscure shows
- Prioritize RECALL over precision — it's better to include too many than too few
- Each "reason" should briefly explain why the show matches the preferences
- Avoid duplicates
- Include shows from different decades, countries, and networks
- Aim for 60–80 candidates minimum`,
      },
      {
        role: 'user',
        content: `Structured preferences:
Liked shows: ${JSON.stringify(input.liked)}
Disliked shows: ${JSON.stringify(input.disliked)}
Themes: ${JSON.stringify(input.themes)}
Character preferences: ${JSON.stringify(input.character_preferences)}
Tone: ${JSON.stringify(input.tone)}
Avoid: ${JSON.stringify(input.avoid)}

Generate a large, diverse pool of TV show candidates.`,
      },
    ],
  });

  const content = response.choices[0]?.message?.content ?? '{"candidates":[]}';
  return JSON.parse(content) as RetrievalOutput;
}
