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

const logger = createLogger('backendDeveloper');

export const runBackendDeveloper = async () => {
  // Check if already completed
  const existingContext = getContext();
  if (existingContext.agents?.backendDeveloper?.completed) {
    return existingContext.agents.backendDeveloper.output;
  }
  
  logger.start();
  
  try {
    const context = getContext();
    const { spec } = context;

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

    const code = await llmClient.generate(prompt);
    
    updateContext({ agents: { ...(context.agents || {}), backendDeveloper: { output: code, completed: true } } });
    logger.success('Generated backend code.');
    return code;
  } catch (error) {
    console.error('[ERROR] Backend developer failed:', error);
    throw error;
  } finally {
    // Always stop the logger, even if an error occurred
    logger.stop();
  }
};
