package com.fzm.mall.server.admin.home_page.service;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fzm.mall.server.admin.auth_center.entity.dto.AddAdminDTO;
import com.fzm.mall.server.admin.auth_center.entity.dto.RepairAdminRoleDTO;
import com.fzm.mall.server.admin.auth_center.entity.dto.ResetAdminPwdDTO;
import com.fzm.mall.server.admin.home_page.entity.dto.RepairPwdDTO;
import com.fzm.mall.server.admin.home_page.entity.dto.ResetPwdDTO;
import com.fzm.mall.server.admin.home_page.entity.dto.SetPwdDTO;
import com.fzm.mall.server.admin.home_page.entity.vo.AdminVO;
import com.fzm.mall.server.admin.home_page.entity.vo.MerchantStatistics;
import com.fzm.mall.server.admin.home_page.entity.vo.PersonInfoVO;
import com.fzm.mall.server.admin.home_page.entity.vo.PlatformStatistics;
import com.fzm.mall.server.admin.home_page.model.Admin;

import java.util.List;

/**
 * @author wangp
 * @date 2021/2/26 16:06
 * @description 管理员服务类
 * @since JDK 1.8
 */
public interface IAdminService extends IService<Admin> {

    /**
     * 新增管理员
     *
     * @param admin 管理员
     * @return 状态码
     */
    void initPlatformAdmin(Admin admin);

    /**
     * 初始化管理员
     *
     * @param admin 管理员
     * @return 状态码
     */
    void initAdmin(Admin admin);

    /**
     * 新增平台管理员
     *
     * @param adminDTO 平台管理员信息
     */
    void addPlatForm(AddAdminDTO adminDTO);

    /**
     * 新增管理员
     *
     * @param adminDTO   管理员信息
     * @param merchantId 商户id
     * @param type       管理员归属
     */
    void add(AddAdminDTO adminDTO, String merchantId, Integer type);

    /**
     * 登陆验证
     *
     * @param account  登陆账户
     * @param password 登陆密码
     * @return 管理员对象
     */
    Admin login(String account, String password);

    /**
     * 根据管理员id获取管理员信息
     *
     * @param adminId 管理员id
     * @return 管理员对象
     */
    Admin getByAdminId(String adminId);

    /**
     * 根据商户id获取管理员信息
     *
     * @param merchantId 商户id
     * @return 管理员列表
     */
    List<Admin> getByMerchantId(String merchantId);

    /**
     * 修改密码
     *
     * @param repairPwdDTO 新密码相关信息
     * @param adminId      管理员id
     * @return 管理员对象
     */
    String repairPwd(RepairPwdDTO repairPwdDTO, String adminId);

    /**
     * 忘记密码重置密码
     *
     * @param resetPwdDTO 新密码相关信息
     */
    void resetPwd(ResetPwdDTO resetPwdDTO);

    /**
     * 检查管理员是否存在
     *
     * @param phone 注册手机号码
     * @return T F
     */
    boolean checkAdminExist(String phone);

    /**
     * 重置登陆密码
     *
     * @param account 账号
     */
    void resetLoginPwd(String account);

    /**
     * 判断平台管理员是否存在
     *
     * @param type 管理员归属
     * @return T F
     */
    boolean getPlatformAdminIsExist(Integer type);

    /**
     * 管理员权限检查
     *
     * @param adminId 管理员id
     * @param type    管理员类别
     */
    void adminAuthCheck(String adminId, Integer type);

    /**
     * 管理员权限检查
     *
     * @param adminId 管理员id
     * @param type    管理员类别
     */
    void adminAuthChecks(String adminId, Integer... type);

    /**
     * 分页查询平台管理员
     *
     * @param uid      管理员id
     * @param account  账号
     * @param admin    管理员
     * @param pageNum  当前页数
     * @param pageSize 每页个数
     * @return 分页信息
     */
    IPage<AdminVO> page(String uid, String account, Admin admin, Integer pageNum, Integer pageSize);

    /**
     * 禁用
     *
     * @param uid 被禁用管理员id
     */
    void disable(String uid);

    /**
     * 启用
     *
     * @param uid 被禁用管理员id
     */
    void able(String uid);

    /**
     * 重置管理员密码
     *
     * @param dto 重置信息
     */
    void resetAdminPwd(ResetAdminPwdDTO dto);

    /**
     * 修改管理员角色
     *
     * @param dto 角色信息
     */
    void repairAdminRole(RepairAdminRoleDTO dto);

    /**
     * 删除管理员
     *
     * @param uid 被删管理员id
     */
    void delete(String uid);

    /**
     * 管理员下线
     */
    void offLineByRoleId(String roleId);

    /**
     * 首页统计-商户
     *
     * @return
     */
    MerchantStatistics merchantStatistics(String merchantId);

    /**
     * 首页统计-平台
     *
     * @return
     */
    PlatformStatistics platformStatistics();

    /**
     * 个人信息
     *
     * @param adminId
     * @return
     */
    PersonInfoVO getMerchantInfo(String adminId);

    /**
     * 修改头像
     *
     * @param adminId
     */
    void repairHeadImg(String adminId, String headImg);

    /**
     * 商户注册设置密码
     *
     * @param dto 新密码相关信息
     */
    void SetPwd(SetPwdDTO dto);
}
