package com.kiisoo.ic.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.kiisoo.ic.system.bean.AccountBean;
import com.kiisoo.ic.system.bean.ImportAccountErrorBean;
import com.kiisoo.ic.system.bean.ModifyAccountInput;
import com.kiisoo.ic.system.bean.SaveAccountInput;
import com.kiisoo.ic.system.entity.PrivilageAccountDO;
import com.kiisoo.ic.system.entity.PrivilageUserDO;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * 账号  服务类
 * @author jinchaofan
 * @since 2020-02-19
 */
public interface PrivilageAccountService extends IService<PrivilageAccountDO> {


    /**
     * 查询账号信息
     * @param pageNum 页码
     * @param pageSize 每页条数
     * @param searchContent 查询内容
     * @param roleId 角色id
     * @param shopId 店铺id
     * @return 账号信息集合
     */
    IPage<AccountBean> listAccountInfo(int pageNum, int pageSize, String searchContent, Long roleId, Long shopId);

    /**
     * 账号管理-保存账号
     * @param saveAccountInput 账号输入类
     * @return 是否成功
     */
    boolean saveAccount(SaveAccountInput saveAccountInput);

    /**
     * 查询账号是否存在
     * @param login 账号
     * @return 账号集合
     */
    List<PrivilageAccountDO> listAccountExists(String login);

    /**
     * 新增账号
     * @param login 账号
     * @param password 密码
     * @param userId 用户id
     * @return 账号id
     */
    Long insertAccount(String login, String password, Long userId);

    /**
     * 删除账号
     * @param accountId 账号id
     * @param userId 用户id
     * @return 是否成功
     */
    boolean removeAccout(Long accountId, Long userId);

    /**
     * 修改账号
     * @param modifyAccountInput 修改账号输入类
     * @return 标识码
     */
    int modifyAccount(ModifyAccountInput modifyAccountInput);

    /**
     * 上传账户信息
     * @param files 文件
     * @param userId 用户
     * @return 如果失败会返回失败信息
     */
    List<ImportAccountErrorBean> uploadAccount(MultipartFile[] files, Long userId) throws IOException;

    Integer modifyAccountStatusById(Long accountId, Integer status);

    int resetPassword(Long accountId);

    int modifyUser(PrivilageUserDO privilageUserDO);
}
