package ink.wgink.module.wechat.miniapp.service;


import ink.wgink.interfaces.user.wechat.miniapp.IMiniappUserBaseService;
import ink.wgink.module.wechat.miniapp.pojo.pos.MiniappUserPO;
import ink.wgink.module.wechat.miniapp.pojo.vos.MiniAppUpdateInfoVO;

import java.util.List;
import java.util.Map;

/**
 * When you feel like quitting. Think about why you started
 * 当你想要放弃的时候，想想当初你为何开始
 *
 * @ClassName: IMiniAppUserService
 * @Description: 小程序用户
 * @Author: wanggeng
 * @Date: 2021/4/8 5:37 下午
 * @Version: 1.0
 */
public interface IMiniappUserService extends IMiniappUserBaseService {

    /**
     * 微信随机用户前缀
     */
    String MINIAPP_RANDOM_USER_PREFIX = "WXM_";

    /**
     * 创建用户并返回用户ID，已经存在的不操作
     *
     * @param appKey
     * @param openId
     * @return
     * @throws Exception
     */
    String createAndReturnUserId(String appKey, String openId) throws Exception;

    /**
     * 更新信息
     *
     * @param token               token
     * @param miniAppUpdateInfoVO
     */
    void updateInfo(String token, MiniAppUpdateInfoVO miniAppUpdateInfoVO) throws Exception;

    /**
     * 更新初始化状态
     *
     * @param userId        用户ID
     * @param isInitAccount 是否是初始化账户，0：否，1：是
     */
    void updateIsInitAccount(String userId, Integer isInitAccount);

    /**
     * 列表
     *
     * @param params
     * @return
     */
    List<MiniappUserPO> listPO(Map<String, Object> params);

    /**
     * 列表
     *
     * @param userId 用户ID
     * @return
     */
    List<MiniappUserPO> listPO(String userId);

    /**
     * 列表
     *
     * @param userIds 用户ID列表
     * @return
     */
    List<MiniappUserPO> listPO(List<String> userIds);

    /**
     * 详情
     *
     * @param params
     * @return
     */
    MiniappUserPO getPO(Map<String, Object> params);

    /**
     * 详情
     *
     * @param userId 用户ID
     * @return
     */
    MiniappUserPO getPO(String userId);

    /**
     * 详情
     *
     * @param appId  appId
     * @param openId openId
     * @return
     */
    MiniappUserPO getPO(String appId, String openId);

    /**
     * 用户码获取用户列表
     *
     * @param userCode 用户码
     * @return
     */
    MiniappUserPO getPOByUserCode(String userCode);

    /**
     * 用户码获取用户列表
     *
     * @param userCodes 用户码列表
     * @return
     */
    List<MiniappUserPO> listPOByUserCodes(List<String> userCodes);

}
