package com.community.huiju.service;

import com.community.commom.constant.Constant;
import com.community.commom.mode.ResponseBean;
import com.community.commom.session.UserElement;
import com.community.huiju.exception.WisdomException;
import com.community.huiju.model.TaUser;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * 用户业务 接口
 *
 * @author weiximei
 */
public interface ITaUserService {


    /**
     * 校验 用户认证状态
     *
     * @param user
     */
    default void checkBlacklistStatusUser(TaUser user) {
        if (Constant.BLACKLIST_STATUS.equals(user.getStatus())) {
            throw new WisdomException("关联账户违反社区规定，无法使用");
        }
    }

    /**
     * 用户登录
     *
     * @param loginName
     * @param code      验证码
     * @param session
     * @return 用户对象
     */
    ResponseBean login(String loginName, String code, HttpSession session);

    /**
     * 注册用户
     *
     * @param parameter
     * @return
     */
    ResponseBean register(String parameter);

    /**
     * 检验登录房产
     *
     * @param response
     * @param currentUser
     * @param session
     * @return
     */
    ResponseBean checkLogin(ResponseBean response, TaUser currentUser, HttpSession session);

    /**
     * 修改当前用户手机号
     *
     * @param userElement
     * @param paramets
     * @return
     */
    ResponseBean updateLoginName(UserElement userElement, String paramets);

    /**
     * 获取房屋成员列表
     *
     * @param userElement
     * @return
     */
    ResponseBean getAllRoomUserList(UserElement userElement);

    /**
     * 修改用户
     *
     * @param userElement
     * @param parameter
     * @return
     */
    ResponseBean modifyUser(UserElement userElement, String parameter);

    /**
     * 停用用户 或者 启用用户
     *
     * @param currentUserId 当前用户(业主)
     * @param userId
     * @param type          1启用 0停用
     * @return
     */
    ResponseBean startOrEndUsingUser(Integer currentUserId, Integer userId, Integer type);


    /**
     * 添加租客或者家属
     *
     * @param userElement 用户信息
     * @param parameter   "userName(租客或者家属 姓名) " +
     *                    "phone(租客或者家属 手机号) " +
     *                    "gender(租客或者家属 性别 1男 2女) " +
     *                    "type(2租客 3家属)" +
     *                    "idCard(身份证号)" +
     *                    "code(验证码)"
     * @return
     */
    ResponseBean addTenantsOrDependents(UserElement userElement, String parameter);

    /**
     * 修改租客或者家属
     *
     * @param userName
     * @param phone
     * @param gender
     * @param currentUserId 当前用户(业主)
     * @param type          2租客 3家属
     * @param userId        用户ID
     * @param idCard        身份证号
     * @return
     */
    @Deprecated
    ResponseBean updateTenantsOrDependents(String userName, String phone, String gender, Integer currentUserId, Integer type, Integer userId, String idCard);

    /**
     * 修改用户头像
     *
     * @param currentUserId
     * @param headPortrait  图片url
     * @return
     */
    ResponseBean modifyUserHeadPortrait(Integer currentUserId, String headPortrait);

    /**
     * 获取用户信息
     *
     * @param userElement 当前用户
     * @param userId      被查询用户, 一般是业主情况下有效, 查的是下面的家属或者租客
     * @param userVerifyId  审核id 只有在 userId 参数存在的情况才有效
     * @return
     */
    ResponseBean getUserInfo(UserElement userElement, Integer userId, Integer userVerifyId, HttpSession session);

    /**
     * 游客登录
     * @return
     */
    ResponseBean temporaryLogin(HttpSession session);

    /**
     * 迎宾专用 接口  添加人员
     *
     * @param userElement
     * @param user
     * @param user
     * @return
     */
    ResponseBean addWelcomeUser(UserElement userElement, TaUser user);

    /**
     * 绑定选中的当前房产，进行登录 (在APP登录后，选择房产的时候), 还可以用于切换房产登录
     *
     * @param userElement
     * @param userVerifyId
     * @return
     */
    ResponseBean bindingLoginAndHouse(UserElement userElement, Integer userVerifyId);

    /**
     * 校验 手机号是否被注册
     *
     * @param phone
     * @return
     */
    TaUser hasUserPhone(String phone);

    /**
     * 根据手机号， 期/楼栋/单元/楼层/户号  进行校验查询
     * @param phone
     * @param userElement
     * @return
     */
    ResponseBean hasUserPhoneVerify(String phone, UserElement userElement);

    /**
     * 删除 租客或者家属
     *
     * @param userElement
     * @param userVerifyId
     * @return
     */
    ResponseBean deleteTenantAndRelation(UserElement userElement, Integer userVerifyId);

    /**
     * 大苏 token生成
     * @param appid
     * @param datetime 时间戳
     * @param encrypt 加密方式(默认MD5)
     * @param communityId 小区
     * @param phone 手机号
     * @param sign 传过来的签名
     * @return
     */
    ResponseBean daSuToken(String appid, String datetime, String encrypt, String communityId, String phone,String sign, HttpSession session);
}
