
package com.tmerclub.cloud.multishop.service;

import com.tmerclub.cloud.common.database.dto.PageDTO;
import com.tmerclub.cloud.common.database.vo.PageVO;
import com.tmerclub.cloud.common.response.ServerResponseEntity;
import com.tmerclub.cloud.multishop.dto.ShopUserDTO;
import com.tmerclub.cloud.multishop.dto.ShopUserRegisterDTO;
import com.tmerclub.cloud.multishop.model.ShopUser;
import com.tmerclub.cloud.multishop.vo.ShopUserVO;

import java.util.List;

/**
 * @author tmerclub
 * @date 2020/09/03
 */
public interface ShopUserService {

    /**
     * 分页获取店铺用户列表
     * @param pageDTO 分页参数
     * @param shopUserDTO 搜索参数
     * @return 店铺用户列表
     */
    PageVO<ShopUserVO> pageByShopId(PageDTO pageDTO, ShopUserDTO shopUserDTO);

    /**
     * 获取店铺用户列表
     * @param shopUserDTO 店铺用户dto
     * @return 店铺用户列表
     */
    List<ShopUserVO> listShopUser(ShopUserDTO shopUserDTO);

    /**
     * 根据用户id获取商家用户信息
     *
     * @param userId 用户id
     * @return 商家用户信息
     */
    ShopUserVO getByUserId(Long userId);

    /**
     * 根据用户id获取商家用户信息
     *
     * @param userId 用户id
     * @return 商家用户信息
     */
    ShopUserVO getSimpleByUserId(Long userId);

    /**
     * 保存店铺用户信息
     * @param shopUser 店铺用户id
     * @param roleIds 角色id列表
     */
    void save(ShopUser shopUser, List<Long> roleIds);

    /**
     * 更新店铺用户信息
     * @param shopUser 店铺用户id
     * @param roleIds 角色id列表
     */
    void update(ShopUser shopUser, List<Long> roleIds);

    /**
     * 根据店铺用户id删除店铺用户信息
     * @param shopUserId 店铺用户id
     */
    void deleteById(Long shopUserId);

    /**
     * 获取店主账号的用户id-第一个创建的账号（仅用于审核店铺）
     * @param shopId
     * @return
     */
    Long getUserIdByShopId(Long shopId);

    /**
     * 商家注册
     * @param shopUserRegisterDTO
     */
    void register(ShopUserRegisterDTO shopUserRegisterDTO);

    /**
     * 验证店铺的职工手机号/邮箱/用户名是否存在
     * @param shopUserDTO 店铺职工信息参数
     * @return Boolean true验证通过,该账号不存在 false验证不通过，该账号存在
     */
    ServerResponseEntity<Boolean> verifyShopUserAccount(ShopUserDTO shopUserDTO);

    /**
     * 新增店铺职工信息，以及账号
     * @param shopUserDTO 店铺职工参数
     */
    void saveAccount(ShopUserDTO shopUserDTO);

    /**
     * 修改店铺职工信息，以及账号
     * @param shopUserDTO 店铺职工参数
     */
    void updateAccount(ShopUserDTO shopUserDTO);

    /**
     * 获取员工列表
     * @param shopUserDTO
     * @return
     */
    List<ShopUserVO> listByShopId(ShopUserDTO shopUserDTO);

    /**
     * 根据用户id列表获取
     * @param userIds
     * @return
     */
    List<ShopUser> listShopUserByUserIds(List<Long> userIds);

    /**
     * 根据用户手机号查询用户数量
     *
     * @param mobile 手机号码
     * @return 用户数量
     */
    Integer countAccoutByMobile(String mobile);
}
