const express = require('express');
const prisma = require('../lib/prisma');
const { adminAuthMiddleware } = require('../lib/auth');

const router = express.Router();

// 敏感配置项的值需要脱敏显示
const SENSITIVE_KEYS = ['SYNC_SECRET'];

// 受保护配置项：禁止通过 PUT 接口直接覆写
// SYNC_SECRET 由系统自动生成并轮换，管理员手动覆写会导致已知密钥攻击
const PROTECTED_KEYS = ['SYNC_SECRET'];

// 获取所有配置
router.get('/', adminAuthMiddleware, async (req, res) => {
  try {
    const configs = await prisma.systemConfig.findMany();
    const result = configs.map((c) => ({
      key: c.key,
      value: SENSITIVE_KEYS.includes(c.key) ? '***' : c.value,
      updatedAt: c.updatedAt,
    }));
    res.json({ configs: result });
  } catch (err) {
    console.error('获取系统配置失败:', err);
    res.status(500).json({ error: '服务器错误' });
  }
});

// 更新配置项
router.put('/:key', adminAuthMiddleware, async (req, res) => {
  try {
    const { value } = req.body;
    if (value === undefined || value === null) {
      return res.status(400).json({ error: 'value 不能为空' });
    }
    if (typeof value !== 'string' || value.length === 0) {
      return res.status(400).json({ error: 'value 必须为非空字符串' });
    }

    // 受保护配置项禁止通过此接口覆写
    if (PROTECTED_KEYS.includes(req.params.key)) {
      return res.status(403).json({
        error: `配置项 ${req.params.key} 受系统保护，禁止手动修改（由系统自动管理）`,
      });
    }

    const config = await prisma.systemConfig.upsert({
      where: { key: req.params.key },
      update: { value },
      create: { key: req.params.key, value },
    });
    res.json({
      config: {
        key: config.key,
        value: SENSITIVE_KEYS.includes(config.key) ? '***' : config.value,
        updatedAt: config.updatedAt,
      },
    });
  } catch (err) {
    console.error('更新系统配置失败:', err);
    res.status(500).json({ error: '更新失败' });
  }
});

module.exports = router;
