import { createLogger } from '../utils/logger';
import { getContext, updateContext } from '../utils/contextStore';
import { getLlmClient } from '../llm/llmRouter';
import { dataEngineerPrompt, jsonRepairPrompt } from '../utils/promptTemplates';

const logger = createLogger('dataEngineer');

export const runDataEngineer = async () => {
  logger.start();
  const context = getContext();
  const { spec } = context;

  const llmClient = getLlmClient();
  const prompt = dataEngineerPrompt.replace('{{spec}}', JSON.stringify(spec, null, 2));

  let response = await llmClient.generate(prompt);
  let events;

  try {
    events = JSON.parse(response);
  } catch (error) {
    logger.error('Invalid JSON response from LLM. Attempting to repair...');
    const repairPrompt = jsonRepairPrompt.replace('{{invalidJson}}', response);
    response = await llmClient.generate(repairPrompt);
    try {
      events = JSON.parse(response);
    } catch (error) {
      logger.error('Failed to repair JSON response. Skipping analytics event generation.');
      return;
    }
  }

  updateContext({ agents: { ...(context.agents || {}), dataEngineer: { output: events, completed: true } } });
  logger.stop();
  logger.success('Generated analytics events.');
  return events;
};
