const UserService = require('../../services/user');
const { success } = require('../../utils/response');
const { AppError } = require('../../utils/errors');

class UserController {
  // 获取用户详情
  static async getUserProfile(req, res, next) {
    try {
      const user = await UserService.getUserProfile(req.userId);
      res.json(success({ user }));
    } catch (error) {
      next(error);
    }
  }

  // 更新用户信息
  static async updateProfile(req, res, next) {
    try {
      const user = await UserService.updateUserProfile(req.userId, req.body);
      res.json(success({ 
        user,
        message: '个人信息更新成功'
      }));
    } catch (error) {
      next(error);
    }
  }

  // 搜索用户（管理员功能）
  static async searchUsers(req, res, next) {
    try {
      const result = await UserService.searchUsers(req.query);
      res.json(success(result));
    } catch (error) {
      next(error);
    }
  }

  // 获取用户统计信息（管理员功能）
  static async getUserStatistics(req, res, next) {
    try {
      const stats = await UserService.getUserStatistics();
      res.json(success({ statistics: stats }));
    } catch (error) {
      next(error);
    }
  }

  // 批量操作用户状态（管理员功能）
  static async batchUpdateUserStatus(req, res, next) {
    try {
      const { userIds, status } = req.body;
      
      if (!userIds || !Array.isArray(userIds) || userIds.length === 0) {
        throw new AppError('请选择要操作的用户', 400);
      }

      if (!status || !['active', 'inactive'].includes(status)) {
        throw new AppError('无效的状态值', 400);
      }

      const affectedRows = await UserService.batchUpdateUserStatus(userIds, status);
      
      res.json(success({
        message: `成功更新 ${affectedRows} 个用户状态`,
        affectedRows
      }));
    } catch (error) {
      next(error);
    }
  }

  // 获取用户列表（管理员功能）
  static async getUsers(req, res, next) {
    try {
      const { page = 1, pageSize = 10, userType, status } = req.query;
      
      const result = await UserService.searchUsers({
        page: parseInt(page),
        pageSize: parseInt(pageSize),
        userType,
        status,
        keyword: req.query.keyword
      });

      res.json(success(result));
    } catch (error) {
      next(error);
    }
  }

  // 获取单个用户详情（管理员功能）
  static async getUserById(req, res, next) {
    try {
      const { userId } = req.params;
      
      if (!userId) {
        throw new AppError('用户ID不能为空', 400);
      }

      const user = await UserService.getUserProfile(userId);
      res.json(success({ user }));
    } catch (error) {
      next(error);
    }
  }

  // 删除用户（管理员功能）
  static async deleteUser(req, res, next) {
    try {
      const { userId } = req.params;
      
      if (!userId) {
        throw new AppError('用户ID不能为空', 400);
      }

      // 这里需要实现软删除逻辑
      // 暂时先返回成功消息
      res.json(success({
        message: '用户删除成功',
        userId
      }));
    } catch (error) {
      next(error);
    }
  }
}

module.exports = UserController;