import { Router } from 'express';
import { db } from '../db.js';
import { authRequired, adminRequired } from '../middleware/auth.js';

export const trainingRouter = Router();

// Обучающие переписки — глобальные. Менять может только админ.
// Просматривать список могут все авторизованные (не обязательно, но безвредно);
// здесь оставим всё под админом, т.к. раздел админский.
trainingRouter.use(authRequired, adminRequired);

// GET /api/training — список файлов (без полного содержимого, только превью)
trainingRouter.get('/', (req, res) => {
  const rows = db.prepare(`
    SELECT id, filename, length(content) AS size, created_at,
           substr(content, 1, 200) AS preview
    FROM training_files
    ORDER BY created_at DESC, id DESC
  `).all();
  res.json({ files: rows });
});

// GET /api/training/:id — полное содержимое одного файла
trainingRouter.get('/:id', (req, res) => {
  const row = db.prepare('SELECT id, filename, content, created_at FROM training_files WHERE id = ?')
    .get(Number(req.params.id));
  if (!row) return res.status(404).json({ error: 'Файл не найден' });
  res.json({ file: row });
});

// POST /api/training  { filename, content } — добавить переписку
trainingRouter.post('/', (req, res) => {
  const filename = String(req.body?.filename || '').trim().slice(0, 255) || 'без названия.txt';
  const content = String(req.body?.content || '');
  if (!content.trim()) {
    return res.status(400).json({ error: 'Содержимое пустое' });
  }
  if (content.length > 500_000) {
    return res.status(400).json({ error: 'Файл слишком большой (макс. 500 000 символов)' });
  }
  const info = db.prepare('INSERT INTO training_files (filename, content) VALUES (?, ?)')
    .run(filename, content);
  res.status(201).json({ id: info.lastInsertRowid });
});

// DELETE /api/training/:id — удалить переписку
trainingRouter.delete('/:id', (req, res) => {
  const info = db.prepare('DELETE FROM training_files WHERE id = ?').run(Number(req.params.id));
  if (info.changes === 0) return res.status(404).json({ error: 'Файл не найден' });
  res.json({ ok: true });
});
