const Merchant = require('../models/Merchant');

/**
 * 获取商户列表
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
async function getMerchantList(req, res, next) {
  try {
    const {
      page = 1,
      limit = 20,
      keyword = '',
      status = '',
      type = ''
    } = req.query;

    // 参数验证
    const pageNum = parseInt(page);
    const limitNum = parseInt(limit);

    if (pageNum < 1) {
      return res.status(400).json({
        success: false,
        message: '页码必须大于0'
      });
    }

    if (limitNum < 1 || limitNum > 100) {
      return res.status(400).json({
        success: false,
        message: '每页数量必须在1-100之间'
      });
    }

    const options = {
      page: pageNum,
      limit: limitNum,
      keyword: keyword.trim(),
      status,
      type
    };

    const result = await Merchant.getMerchantList(options);

    res.json({
      success: true,
      data: result.merchants,
      pagination: result.pagination
    });
  } catch (error) {
    console.error('获取商户列表控制器错误:', error);
    res.status(500).json({
      success: false,
      message: error.message || '获取商户列表失败'
    });
  }
}

/**
 * 获取商户详情
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
async function getMerchantDetail(req, res, next) {
  try {
    const { merchantId } = req.params;

    if (!merchantId || isNaN(merchantId)) {
      return res.status(400).json({
        success: false,
        message: '商户ID无效'
      });
    }

    const merchant = await Merchant.getMerchantDetail(parseInt(merchantId));

    if (!merchant) {
      return res.status(404).json({
        success: false,
        message: '商户不存在'
      });
    }

    res.json({
      success: true,
      data: merchant
    });
  } catch (error) {
    console.error('获取商户详情控制器错误:', error);
    res.status(500).json({
      success: false,
      message: error.message || '获取商户详情失败'
    });
  }
}

/**
 * 创建商户
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
async function createMerchant(req, res, next) {
  try {
    const merchantData = req.body;

    // 验证必要字段
    const requiredFields = ['name', 'type', 'contact_person', 'contact_phone'];
    for (const field of requiredFields) {
      if (!merchantData[field]) {
        return res.status(400).json({
          success: false,
          message: `缺少必要字段: ${field}`
        });
      }
    }

    // 验证商户类型
    if (!['individual', 'company'].includes(merchantData.type)) {
      return res.status(400).json({
        success: false,
        message: '商户类型必须是 individual 或 company'
      });
    }

    const merchant = await Merchant.create(merchantData);

    res.status(201).json({
      success: true,
      data: merchant,
      message: '商户创建成功'
    });
  } catch (error) {
    console.error('创建商户控制器错误:', error);
    res.status(500).json({
      success: false,
      message: error.message || '创建商户失败'
    });
  }
}

/**
 * 更新商户信息
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
async function updateMerchant(req, res, next) {
  try {
    const { merchantId } = req.params;
    const merchantData = req.body;

    if (!merchantId || isNaN(merchantId)) {
      return res.status(400).json({
        success: false,
        message: '商户ID无效'
      });
    }

    // 检查商户是否存在
    const existingMerchant = await Merchant.findById(parseInt(merchantId));
    if (!existingMerchant) {
      return res.status(404).json({
        success: false,
        message: '商户不存在'
      });
    }

    // 验证商户类型（如果提供）
    if (merchantData.type && !['individual', 'company'].includes(merchantData.type)) {
      return res.status(400).json({
        success: false,
        message: '商户类型必须是 individual 或 company'
      });
    }

    // 验证状态（如果提供）
    if (merchantData.status && !['active', 'inactive', 'banned'].includes(merchantData.status)) {
      return res.status(400).json({
        success: false,
        message: '商户状态必须是 active、inactive 或 banned'
      });
    }

    const updatedMerchant = await Merchant.update(parseInt(merchantId), merchantData);

    res.json({
      success: true,
      data: updatedMerchant,
      message: '商户信息更新成功'
    });
  } catch (error) {
    console.error('更新商户控制器错误:', error);
    res.status(500).json({
      success: false,
      message: error.message || '更新商户失败'
    });
  }
}

/**
 * 删除商户
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
async function deleteMerchant(req, res, next) {
  try {
    const { merchantId } = req.params;

    if (!merchantId || isNaN(merchantId)) {
      return res.status(400).json({
        success: false,
        message: '商户ID无效'
      });
    }

    // 检查商户是否存在
    const existingMerchant = await Merchant.findById(parseInt(merchantId));
    if (!existingMerchant) {
      return res.status(404).json({
        success: false,
        message: '商户不存在'
      });
    }

    const deleted = await Merchant.delete(parseInt(merchantId));

    if (deleted) {
      res.json({
        success: true,
        message: '商户删除成功'
      });
    } else {
      res.status(500).json({
        success: false,
        message: '删除商户失败'
      });
    }
  } catch (error) {
    console.error('删除商户控制器错误:', error);
    res.status(500).json({
      success: false,
      message: error.message || '删除商户失败'
    });
  }
}

/**
 * 获取商户统计信息
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
async function getMerchantStatistics(req, res, next) {
  try {
    const statistics = await Merchant.getStatistics();

    res.json({
      success: true,
      data: statistics
    });
  } catch (error) {
    console.error('获取商户统计控制器错误:', error);
    res.status(500).json({
      success: false,
      message: error.message || '获取商户统计失败'
    });
  }
}

module.exports = {
  getMerchantList,
  getMerchantDetail,
  createMerchant,
  updateMerchant,
  deleteMerchant,
  getMerchantStatistics
};