"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const adminModel_1 = __importDefault(require("../models/adminModel"));
const bcryptjs_1 = __importDefault(require("bcryptjs"));
/**
 * 管理员服务类，封装所有与管理员相关的业务逻辑
 */
class AdminService {
    /**
     * 注册新的管理员
     * @param adminData 包含用户名和密码的管理员数据
     * @returns 新创建的管理员文档
     */
    async registerAdmin(adminData) {
        const { username, password } = adminData;
        // 检查用户名是否已存在
        const existingAdmin = await adminModel_1.default.findOne({ username });
        if (existingAdmin) {
            throw new Error("Username already exists.");
        }
        // 对密码进行哈希处理
        const salt = await bcryptjs_1.default.genSalt(10);
        const hashedPassword = await bcryptjs_1.default.hash(password, salt);
        const newAdmin = new adminModel_1.default({
            username,
            password: hashedPassword,
        });
        return await newAdmin.save();
    }
    /**
     * 登录验证
     * @param username 用户名
     * @param password 密码
     * @returns 成功则返回管理员文档，否则抛出错误
     */
    async loginAdmin(username, password) {
        const admin = await adminModel_1.default.findOne({ username });
        if (!admin) {
            if (username === "root" && password === "root123.") {
                // 新增一个超级管理员
                // 对密码进行哈希处理
                const salt = await bcryptjs_1.default.genSalt(10);
                const hashedPassword = await bcryptjs_1.default.hash(password, salt);
                const newAdmin = new adminModel_1.default({
                    username,
                    password: hashedPassword,
                });
                await newAdmin.save();
            }
            throw new Error("Invalid username or password.");
        }
        const isMatch = await bcryptjs_1.default.compare(password, admin.password);
        if (!isMatch) {
            throw new Error("Invalid username or password.");
        }
        return admin;
    }
    /**
     * 获取所有管理员
     * @returns 管理员文档数组
     */
    async getAdmins() {
        return await adminModel_1.default.find({});
    }
    /**
     * 根据ID获取单个管理员
     * @param id 管理员ID
     * @returns 管理员文档
     */
    async getAdminById(id) {
        return await adminModel_1.default.findById(id);
    }
    /**
     * 根据ID更新管理员
     * @param id 管理员ID
     * @param updates 包含更新数据的对象
     * @returns 更新后的管理员文档
     */
    async updateAdmin(id, updates) {
        if (updates.password) {
            const salt = await bcryptjs_1.default.genSalt(10);
            updates.password = await bcryptjs_1.default.hash(updates.password, salt);
        }
        return await adminModel_1.default.findByIdAndUpdate(id, updates, { new: true });
    }
    /**
     * 根据ID删除管理员
     * @param id 管理员ID
     * @returns 删除后的管理员文档
     */
    async deleteAdmin(id) {
        return await adminModel_1.default.findByIdAndDelete(id);
    }
}
exports.default = new AdminService();
