const database = require('../../config/database');
const Admin = require('../../models/admin');

class AdminService {
  /**
   * 获取管理员列表
   * @param {Object} filters - 筛选条件
   * @returns {Promise<Object>} 管理员列表和分页信息
   */
  async getAdminList(filters = {}) {
    try {
      const { page = 1, pageSize = 10, username, role, status } = filters;
      const offset = (parseInt(page) - 1) * parseInt(pageSize);

      // 构建查询条件
      let whereClause = 'WHERE 1=1';
      const params = [];

      if (username) {
        whereClause += ' AND username LIKE ?';
        params.push(`%${username}%`);
      }

      if (role) {
        whereClause += ' AND role = ?';
        params.push(role);
      }

      if (status !== undefined) {
        whereClause += ' AND status = ?';
        params.push(status);
      }

      // 查询总数
      const countSql = `SELECT COUNT(*) as total FROM admins ${whereClause}`;
      const [countResult] = await database.query(countSql, params);
      const total = countResult.total;

      // 查询数据
      const sql = `
        SELECT id, username, email, nickname, avatar, role, status, last_login, created_at, updated_at 
        FROM admins 
        ${whereClause} 
        ORDER BY created_at DESC 
        LIMIT ? OFFSET ?
      `;

      params.push(parseInt(pageSize), offset);
      const admins = await database.query(sql, params);

      return {
        admins,
        pagination: {
          page: parseInt(page),
          pageSize: parseInt(pageSize),
          total,
          totalPages: Math.ceil(total / parseInt(pageSize))
        }
      };
    } catch (error) {
      console.error('获取管理员列表失败:', error);
      throw new Error('获取管理员列表失败');
    }
  }

  /**
   * 创建管理员
   * @param {Object} adminData - 管理员数据
   * @returns {Promise<Object>} 创建的管理员
   */
  async createAdmin(adminData) {
    try {
      // 检查用户名是否已存在
      const existingAdmin = await this.getAdminByUsername(adminData.username);
      if (existingAdmin) {
        throw new Error('用户名已存在');
      }

      // 创建管理员
      const admin = await Admin.create(adminData);
      return admin.toSafeObject();
    } catch (error) {
      console.error('创建管理员失败:', error);
      throw error;
    }
  }

  /**
   * 根据用户名获取管理员
   * @param {string} username - 用户名
   * @returns {Promise<Object|null>} 管理员信息
   */
  async getAdminByUsername(username) {
    try {
      return await Admin.findByUsername(username);
    } catch (error) {
      console.error('获取管理员失败:', error);
      throw new Error('获取管理员失败');
    }
  }

  /**
   * 根据ID获取管理员
   * @param {number} id - 管理员ID
   * @returns {Promise<Object|null>} 管理员信息
   */
  async getAdminById(id) {
    try {
      return await Admin.findById(id);
    } catch (error) {
      console.error('获取管理员失败:', error);
      throw new Error('获取管理员失败');
    }
  }

  /**
   * 更新管理员信息
   * @param {number} id - 管理员ID
   * @param {Object} updateData - 更新数据
   * @returns {Promise<Object>} 更新后的管理员信息
   */
  async updateAdmin(id, updateData) {
    try {
      const admin = await Admin.findById(id);
      if (!admin) {
        throw new Error('管理员不存在');
      }

      await admin.update(updateData);
      return admin.toSafeObject();
    } catch (error) {
      console.error('更新管理员失败:', error);
      throw error;
    }
  }

  /**
   * 删除管理员
   * @param {number} id - 管理员ID
   * @returns {Promise<boolean>} 是否删除成功
   */
  async deleteAdmin(id) {
    try {
      const admin = await Admin.findById(id);
      if (!admin) {
        throw new Error('管理员不存在');
      }

      await admin.delete();
      return true;
    } catch (error) {
      console.error('删除管理员失败:', error);
      throw error;
    }
  }
}

module.exports = new AdminService();