import { Router } from 'express';
import Anthropic from '@anthropic-ai/sdk';
import { getSetting, setSetting } from '../db.js';
import { authRequired, adminRequired } from '../middleware/auth.js';

export const settingsRouter = Router();
settingsRouter.use(authRequired, adminRequired);

// GET /api/settings — глобальные настройки Claude (API ключ НЕ отдаём, только флаг)
settingsRouter.get('/', (req, res) => {
  let rateTable = {};
  try { rateTable = JSON.parse(getSetting('rate_table') || '{}'); } catch { rateTable = {}; }
  res.json({
    settings: {
      api_key_set: !!getSetting('anthropic_api_key'),
      claude_model: getSetting('claude_model') || 'claude-opus-4-8',
      base_style_prompt: getSetting('base_style_prompt'),
      // настройки обработки анкет
      apply_domain: getSetting('apply_domain'),
      rate_table: rateTable,
      template_fulltime: getSetting('template_fulltime'),
      template_parttime: getSetting('template_parttime'),
    },
  });
});

// PUT /api/settings — сохранить. Пустой api_key => не менять.
settingsRouter.put('/', (req, res) => {
  const b = req.body || {};
  if (typeof b.api_key === 'string' && b.api_key.trim()) {
    setSetting('anthropic_api_key', b.api_key.trim());
  }
  if (typeof b.claude_model === 'string' && b.claude_model.trim()) {
    setSetting('claude_model', b.claude_model.trim());
  }
  if (typeof b.base_style_prompt === 'string') {
    setSetting('base_style_prompt', b.base_style_prompt);
  }
  // настройки обработки анкет
  if (typeof b.apply_domain === 'string') {
    setSetting('apply_domain', b.apply_domain.trim());
  }
  if (b.rate_table && typeof b.rate_table === 'object') {
    setSetting('rate_table', JSON.stringify(b.rate_table, null, 2));
  }
  if (typeof b.template_fulltime === 'string') {
    setSetting('template_fulltime', b.template_fulltime);
  }
  if (typeof b.template_parttime === 'string') {
    setSetting('template_parttime', b.template_parttime);
  }
  res.json({ ok: true });
});

// POST /api/settings/test-key — проверить, что API ключ рабочий (короткий запрос к Claude)
settingsRouter.post('/test-key', async (req, res) => {
  const apiKey = (req.body?.api_key || '').trim() || getSetting('anthropic_api_key');
  if (!apiKey) return res.status(400).json({ ok: false, error: 'API ключ не задан' });
  const model = getSetting('claude_model') || 'claude-opus-4-8';
  try {
    const client = new Anthropic({ apiKey });
    await client.messages.create({
      model,
      max_tokens: 16,
      messages: [{ role: 'user', content: 'ping' }],
    });
    res.json({ ok: true, message: `Ключ рабочий, модель ${model} доступна.` });
  } catch (err) {
    res.status(400).json({ ok: false, error: `Claude: ${err.message}` });
  }
});
