package com.snack.server.module.admin.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.snack.server.module.admin.dto.req.AdminLoginReq;
import com.snack.server.module.admin.dto.req.AdminPageReq;
import com.snack.server.module.admin.dto.req.AdminProfileReq;
import com.snack.server.module.admin.dto.req.AdminSaveReq;
import com.snack.server.module.admin.dto.req.ChangePasswordReq;
import com.snack.server.module.admin.entity.Admin;
import com.snack.server.module.admin.vo.AdminVO;
import com.snack.server.module.admin.vo.LoginVO;

/**
 * 管理员业务接口
 */
public interface AdminService {

    /**
     * 登录
     *
     * @param req      登录参数
     * @param clientIp 客户端 IP
     * @return 登录响应（含 token + 管理员信息）
     */
    LoginVO login(AdminLoginReq req, String clientIp);

    /**
     * 登出
     */
    void logout();

    /**
     * 获取当前登录的管理员信息
     */
    AdminVO getCurrentAdmin();

    /**
     * 更新当前登录管理员的个人资料（昵称/头像/邮箱/手机号）
     */
    void updateProfile(AdminProfileReq req);

    /**
     * 分页查询管理员列表
     */
    Page<AdminVO> pageAdmins(AdminPageReq req);

    /**
     * 根据 ID 获取管理员
     */
    AdminVO getAdminById(Long id);

    /**
     * 创建管理员
     */
    Long createAdmin(AdminSaveReq req);

    /**
     * 更新管理员
     */
    void updateAdmin(AdminSaveReq req);

    /**
     * 删除管理员
     */
    void deleteAdmin(Long id);

    /**
     * 修改自己的密码
     */
    void changePassword(ChangePasswordReq req);

    /**
     * 重置某管理员的密码（仅超管可用）
     */
    void resetPassword(Long id, String newPassword);

    /**
     * 启用 / 禁用管理员
     */
    void updateStatus(Long id, Integer status);

    /**
     * 更新登录信息（IP + 时间）
     */
    void updateLoginInfo(Long id, String clientIp);
}
