import type { APIRoute } from 'astro';

export const prerender = false;

const SYSTEM_PROMPT = `Ești un traducător din limbaj birocratic/juridic românesc în limbaj simplu, pe înțelesul oricui.

Reguli:
1. Primești un text oficial (lege, hotărâre, adresă, contract, etc.) și îl explici în limba română normală.
2. Folosește propoziții scurte și clare. Evită jargonul.
3. Dacă textul cere o acțiune din partea cititorului, spune clar CE trebuie să facă.
4. Evidențiază termenii cheie și explică-i pe scurt între paranteze dacă e necesar.
5. Păstrează structura logică: dacă textul original are mai multe puncte, menține-le.
6. NU inventa informații. Dacă ceva e ambiguu în text, spune-o.
7. Răspunde DOAR cu traducerea/explicația. Fără introduceri de genul "Iată traducerea:" sau "Textul original spune:".
8. Tonul: prietenos, direct, ca și cum ai explica unui prieten.
9. Dacă textul conține referințe la legi (ex: "art. 7 alin. (2) din Legea nr. 50/1991"), menționează-le pe scurt dar explică ce înseamnă practic.`;

// Ollama (local Gemma 3 12B) — primary
// Claude API — fallback if Ollama unavailable
const OLLAMA_URL = process.env.OLLAMA_URL || 'http://localhost:11434';
const OLLAMA_MODEL = process.env.OLLAMA_MODEL || 'gemma3:12b';

async function translateWithOllama(text: string): Promise<string> {
  const res = await fetch(`${OLLAMA_URL}/api/chat`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      model: OLLAMA_MODEL,
      messages: [
        { role: 'system', content: SYSTEM_PROMPT },
        { role: 'user', content: `Traduce următorul text oficial în limbaj simplu:\n\n${text}` },
      ],
      stream: false,
    }),
  });

  if (!res.ok) throw new Error(`Ollama error: ${res.status}`);
  const data = await res.json();
  return data.message?.content || '';
}

async function translateWithClaude(text: string, apiKey: string): Promise<string> {
  const { default: Anthropic } = await import('@anthropic-ai/sdk');
  const client = new Anthropic({ apiKey });

  const message = await client.messages.create({
    model: 'claude-haiku-4-5-20251001',
    max_tokens: 2048,
    system: SYSTEM_PROMPT,
    messages: [
      { role: 'user', content: `Traduce următorul text oficial în limbaj simplu:\n\n${text}` },
    ],
  });

  const content = message.content[0];
  return content.type === 'text' ? content.text : '';
}

export const POST: APIRoute = async ({ request }) => {
  let body: { text?: string };
  try {
    body = await request.json();
  } catch {
    return new Response(
      JSON.stringify({ error: 'Request invalid.' }),
      { status: 400, headers: { 'Content-Type': 'application/json' } }
    );
  }

  const text = body.text?.trim();
  if (!text || text.length < 10) {
    return new Response(
      JSON.stringify({ error: 'Textul trebuie să aibă cel puțin 10 caractere.' }),
      { status: 400, headers: { 'Content-Type': 'application/json' } }
    );
  }

  if (text.length > 5000) {
    return new Response(
      JSON.stringify({ error: 'Textul nu poate depăși 5000 de caractere.' }),
      { status: 400, headers: { 'Content-Type': 'application/json' } }
    );
  }

  // Try Ollama first (local, free), fall back to Claude API
  try {
    const translation = await translateWithOllama(text);
    if (translation) {
      return new Response(
        JSON.stringify({ translation, provider: 'local' }),
        { status: 200, headers: { 'Content-Type': 'application/json' } }
      );
    }
  } catch (err) {
    console.warn('Ollama unavailable, trying Claude fallback:', (err as Error).message);
  }

  // Fallback: Claude API
  const apiKey = import.meta.env.ANTHROPIC_API_KEY || process.env.ANTHROPIC_API_KEY;
  if (apiKey) {
    try {
      const translation = await translateWithClaude(text, apiKey);
      return new Response(
        JSON.stringify({ translation, provider: 'cloud' }),
        { status: 200, headers: { 'Content-Type': 'application/json' } }
      );
    } catch (err) {
      console.error('Claude API error:', err);
    }
  }

  return new Response(
    JSON.stringify({ error: 'Serviciul de traducere nu este disponibil momentan. Încearcă din nou.' }),
    { status: 503, headers: { 'Content-Type': 'application/json' } }
  );
};
