import Anthropic from '@anthropic-ai/sdk';
import { db, getSetting } from '../db.js';

// Собираем системный промпт: базовый стиль (admin) + личность (профиль юзера) + примеры переписок.
export function buildSystemPrompt(profile) {
  const base = getSetting('base_style_prompt');

  const identity = [
    'Ты отвечаешь на письма от лица конкретного человека:',
    profile.full_name ? `Имя: ${profile.full_name}` : null,
    profile.company ? `Компания: ${profile.company}` : null,
    profile.position ? `Должность: ${profile.position}` : null,
  ].filter(Boolean).join('\n');

  const files = db.prepare('SELECT filename, content FROM training_files ORDER BY id').all();
  const examples = files.length
    ? files.map((f, i) => `=== Пример ${i + 1} (${f.filename}) ===\n${f.content}`).join('\n\n')
    : '(примеров переписок пока нет — отвечай вежливо и по-деловому)';

  return [
    base,
    identity,
    'Ниже — реальные примеры переписок. Перейми из них стиль, тон, структуру и манеру ответов:',
    examples,
    'Правила: пиши только текст ответа на письмо. Не добавляй тему письма. ' +
    'Не добавляй подпись — она будет добавлена автоматически. ' +
    'Не пиши пояснений о том, что ты ИИ.',
  ].join('\n\n');
}

// Генерация ответа на входящее письмо.
// incoming: { from, subject, body }  profile: { full_name, company, position, signature }
export async function generateReply({ incoming, profile }) {
  const apiKey = getSetting('anthropic_api_key');
  if (!apiKey) {
    throw new Error('Не задан Claude API ключ. Администратор должен указать его в разделе «Настройки Claude».');
  }
  const model = getSetting('claude_model') || 'claude-opus-4-8';

  const client = new Anthropic({ apiKey });
  const system = buildSystemPrompt(profile);

  const userContent =
    `Входящее письмо.\n` +
    `От: ${incoming.from || '(неизвестно)'}\n` +
    `Тема: ${incoming.subject || '(без темы)'}\n\n` +
    `${incoming.body || ''}\n\n` +
    `Напиши ответ на это письмо.`;

  const response = await client.messages.create({
    model,
    max_tokens: 2000,
    system,
    messages: [{ role: 'user', content: userContent }],
  });

  // Ответ — список блоков; берём текстовые.
  const text = response.content
    .filter((b) => b.type === 'text')
    .map((b) => b.text)
    .join('')
    .trim();

  const signature = profile.signature ? `\n\n${profile.signature}` : '';
  return text + signature;
}
