package com.hfkj.service.user;

import com.hfkj.common.security.SessionObject;
import com.hfkj.entity.BsUser;
import com.hfkj.sysenum.UserLoginPlatform;
import com.hfkj.sysenum.UserLoginType;

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

/**
 * @className: BsUserService
 * @author: HuRui
 * @date: 2024/5/6
 **/
public interface BsUserService {

    /**
     * 编辑数据
     * @param data
     */
    void editData(BsUser data);

    /**
     * @MethodName insertUserBatch
     * @Description: 批量插入
     * @param data
     * @Author: Sum1Dream
     * @Date: 2024/7/24 下午5:38
     */
    void insertUserBatch(List<BsUser> data);

    /**
     * @MethodName updateUserBatch
     * @Description: 批量更新
     * @param data
     * @Author: Sum1Dream
     * @Date: 2024/7/24 下午5:38
     */
    void updateUserBatch(List<BsUser> data);

    /**
     * 获取用户
     * @param userId 用户id
     * @return
     */
    BsUser getUser(Long userId);

    /**
     * 获取用户
     * @param phone 手机号
     * @return
     */
    BsUser getUser(String phone);


    BsUser getUserByMaOpenId(String maOpenId);

    /**
     * 获取用户
     * @param vFamilyOpenid 手机号
     * @return
     */
    BsUser getUserByOutsideOpenid(String vFamilyOpenid);


    /**
     * 获取用户列表
     * @param param
     * @return
     */
    List<BsUser> getList(Map<String,Object> param);

    /**
     * 用户注册
     * @param phone    手机号
     * @param password 密码【可以为 NULL】
     * @param other    其他参数
     * @return
     * @throws Exception
     */
    BsUser register(String phone,String password, Map<String, Object> other);

    /**
     * 用户注册
     * @param vFamilyOpenid    v家园
     * @param other    其他参数
     * @return
     * @throws Exception
     */
    BsUser register(String vFamilyOpenid, Map<String, Object> other);

    /**
     * 用户登录
     * @param platform 客户端
     * @param loginType 登录方式
     * @param phone    手机号
     * @param password 密码【可以为 NULL】
     * @param other    其他参数
     * @return
     * @throws Exception
     */
    SessionObject login(UserLoginPlatform platform, UserLoginType loginType, String phone, String password, Map<String, Object> other) throws Exception;

    /**
     * 用户登录
     * @param platform 客户端
     * @param loginType 登录方式
     * @param outsideOpenid    外部openid
     * @param other    其他参数
     * @return
     * @throws Exception
     */
    SessionObject login(UserLoginPlatform platform, UserLoginType loginType,  String outsideOpenid,  Map<String, Object> other) throws Exception;

    /**
     * 退出登录
     * @param token
     */
    void loginOut(String token);

    /**
     * 更新登录Session
     * @param userId 用户id
     * @return
     */
    SessionObject updateSession(Long userId);

}
