package com.dora.service;

import com.dora.dto.AdminAuthDto;
import com.dora.dto.ApiResponse;

/**
 * 管理员认证服务接口
 */
public interface AdminAuthService {

    /**
     * 管理员首次注册（仅当系统中没有任何管理员时可用）
     * @param request 注册请求
     * @return 注册结果
     */
    ApiResponse<String> firstTimeRegister(AdminAuthDto.AdminRegisterRequest request);

    /**
     * 管理员注册
     * @param request 注册请求
     * @return 注册结果
     */
    ApiResponse<String> register(AdminAuthDto.AdminRegisterRequest request);

    /**
     * 管理员登录
     * @param request 登录请求
     * @return 登录响应
     */
    ApiResponse<AdminAuthDto.AdminLoginResponse> login(AdminAuthDto.AdminLoginRequest request);

    /**
     * 获取管理员信息
     * @param adminId 管理员ID
     * @return 管理员信息
     */
    ApiResponse<AdminAuthDto.AdminInfoResponse> getAdminInfo(Long adminId);

    /**
     * 获取仪表盘数据
     * @param adminId 管理员ID
     * @return 仪表盘数据
     */
    ApiResponse<AdminAuthDto.DashboardResponse> getDashboardData(Long adminId);

    /**
     * 验证管理员权限
     * @param adminId 管理员ID
     * @param permission 权限
     * @return 是否有权限
     */
    boolean hasPermission(Long adminId, String permission);

    /**
     * 检查是否为管理员
     * @param adminId 管理员ID
     * @return 是否为管理员
     */
    boolean isAdmin(Long adminId);

    /**
     * 检查是否为工作人员
     * @param adminId 管理员ID
     * @return 是否为工作人员
     */
    boolean isStaff(Long adminId);

    /**
     * 检查系统是否需要初始化（是否存在管理员账号）
     * @return 是否需要初始化
     */
    boolean needsInitialization();
} 