import { storage } from './storage';

/**
 * Anthropic API Service
 * Handles communication with the /v1/messages endpoint via Nginx proxy.
 */

const DEFAULT_MODEL = 'claude-sonnet-4-20250514';

export const anthropicApi = {
  async generateContent(systemPrompt, userMessage, maxRetries = 1) {
    // Check if simulation mode is on
    const useSimulation = storage.get('admin:use_simulation') === true;
    if (useSimulation) {
      console.log('[API] Simulation mode active. Mock data will be returned.');
      return await simulateResponse();
    }

    const apiKey = storage.get('admin:anthropic_key') || import.meta.env.VITE_ANTHROPIC_API_KEY;
    if (!apiKey) {
      throw new Error('No Anthropic API key found. Please configure it in Admin -> Settings.');
    }

    // Model is configurable from Admin > Settings, defaults to the original spec model
    const model = storage.get('admin:model') || DEFAULT_MODEL;
    console.log(`[API] Calling with model: ${model}`);

    let retries = 0;
    while (retries <= maxRetries) {
      try {
        const response = await fetch('/api/anthropic/v1/messages', {
          method: 'POST',
          headers: {
            'Content-Type': 'application/json',
            'x-api-key': apiKey,
            'anthropic-version': '2023-06-01',
            'anthropic-dangerous-direct-browser-access': 'true'
          },
          body: JSON.stringify({
            model: model,
            max_tokens: 4000,
            system: systemPrompt,
            messages: [{ role: 'user', content: userMessage }]
          })
        });

        if (!response.ok) {
          const errData = await response.json().catch(() => ({}));
          console.error('[API] Error response:', errData);
          throw new Error(`API Error: ${response.status} ${response.statusText} - ${JSON.stringify(errData)}`);
        }

        const data = await response.json();
        return data.content[0].text;
      } catch (error) {
        console.error('API call failed:', error);
        retries++;
        if (retries > maxRetries) throw error;
        await new Promise(r => setTimeout(r, 1000));
      }
    }
  }
};

async function simulateResponse() {
  await new Promise(r => setTimeout(r, 2000));
  return JSON.stringify({
    topics: [
      { id: "radicale-transparantie", label: "Radicale Transparantie", type: "concept", description: "De kernwaarde van Respellion waarbij alle informatie publiek toegankelijk is." },
      { id: "kennisbeheer", label: "Kennisbeheer", type: "process", description: "Het proces van het vastleggen en ontsluiten van organisatiekennis." },
      { id: "wekelijkse-sessie", label: "Wekelijkse Leersessie", type: "process", description: "Elke week leren medewerkers via AI-gegenereerde vragen en quizzen." }
    ],
    relations: [
      { source: "kennisbeheer", target: "radicale-transparantie", type: "depends_on" },
      { source: "wekelijkse-sessie", target: "kennisbeheer", type: "part_of" }
    ]
  });
}
