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

const router = express.Router();

// 创建订单（付款）
router.post('/', authMiddleware, async (req, res) => {
  try {
    const { roleId, amount } = req.body;

    // 校验 roleId 和 amount 必填，且 amount > 0
    if (!roleId || amount === undefined || amount === null) {
      return res.status(400).json({ error: 'roleId 和 amount 为必填字段' });
    }
    const amountNum = parseFloat(amount);
    if (isNaN(amountNum) || amountNum <= 0) {
      return res.status(400).json({ error: 'amount 必须为大于 0 的数字' });
    }

    // 查询角色是否存在
    const role = await prisma.role.findUnique({
      where: { id: roleId },
      select: {
        id: true,
        displayName: true,
        qrCodeUrl: true,
        reviewStatus: true,
      },
    });

    if (!role) {
      return res.status(404).json({ error: '角色不存在' });
    }

    // 角色必须已同步且二维码非空
    if (role.reviewStatus !== 'synced' || !role.qrCodeUrl) {
      return res.status(400).json({ error: '该角色尚未同步，无法订阅' });
    }

    // 创建订单（默认 status='paid'）
    const order = await prisma.order.create({
      data: {
        userId: req.userId,
        roleId,
        amount: amountNum,
        status: 'paid',
      },
      select: {
        id: true,
        roleId: true,
        amount: true,
        status: true,
        createdAt: true,
      },
    });

    res.json({
      order,
      role: {
        qrCodeUrl: role.qrCodeUrl,
        displayName: role.displayName,
      },
    });
  } catch (err) {
    console.error('创建订单失败:', err);
    res.status(500).json({ error: '服务器错误' });
  }
});

// 查询当前用户订单列表
router.get('/', authMiddleware, async (req, res) => {
  try {
    const orders = await prisma.order.findMany({
      where: { userId: req.userId },
      orderBy: { createdAt: 'desc' },
      select: {
        id: true,
        roleId: true,
        amount: true,
        status: true,
        createdAt: true,
        role: {
          select: {
            displayName: true,
            avatar: true,
          },
        },
      },
    });
    res.json({ orders });
  } catch (err) {
    console.error('获取订单列表失败:', err);
    res.status(500).json({ error: '服务器错误' });
  }
});

// 查询订单详情
router.get('/:id', authMiddleware, async (req, res) => {
  try {
    const order = await prisma.order.findUnique({
      where: { id: req.params.id },
      select: {
        id: true,
        userId: true,
        roleId: true,
        amount: true,
        status: true,
        createdAt: true,
        role: {
          select: {
            id: true,
            displayName: true,
            avatar: true,
            desc: true,
          },
        },
      },
    });

    if (!order) {
      return res.status(404).json({ error: '订单不存在' });
    }

    // 校验订单归属
    if (order.userId !== req.userId) {
      return res.status(403).json({ error: '无权查看此订单' });
    }

    res.json({ order });
  } catch (err) {
    console.error('获取订单详情失败:', err);
    res.status(500).json({ error: '服务器错误' });
  }
});

module.exports = router;
