package com.uas.account.dao;

import com.uas.account.core.Page;
import com.uas.account.entity.*;
import org.springframework.ui.ModelMap;

import java.util.List;

public interface UserDao {

	/**
	 * 保存、更新用户绑定关系
	 *
	 * @param user
	 * @return
	 */
	User save(User user);

	void delete(User user);

	/**
	 * 按应用、企业删除用户关系
	 *
	 * @param appId
	 * @param spaceId
	 */
	void deleteByAppAndSpace(String appId, long spaceId);

	UserDetail save(UserDetail userDetail);

	UserDetail save(UserDetail userDetail, String oldMobile);

	User findOne(long id);

	UserDetail findOne(String mobile);

	List<UserDetail> findByEmail(String email);

	User findOne(String appId, String spaceUID, String uid);

	User findOne(String appId, Long spaceId, String uid);

	User findDialectOne(String appId, Long spaceId, String dialectUID);

	UserView findOneView(String appId, Long spaceId, String uid);

	UserView findOneViewBySecondUID(String appId, Long spaceId, String secondUID);

	UserView findOneViewByDialectUID(String appId, Long spaceId, String dialectUID);

	List<User> findByUID(String uid);

	List<User> findByDialectUID(String dialectUID);

	List<User> findBySecondUID(String secondUID);

	List<UserView> findViewByUID(String uid);

	List<UserView> findViewBySecondUID(String secondUID);

	List<UserView> findByAppAndUID(String appId, String uid);

	List<UserView> findByAppAndSecondUID(String appId, String secondUID);

	List<UserView> findByAppAndDialectUID(String appId, String dialectUID);

	/**
	 * 按SpaceID来更新其他Space字段
	 *
	 * @param spaceId
	 * @param newAppId
	 * @param newSpaceUID
	 */
	void updateUserSpace(long spaceId, String newAppId, String newSpaceUID);

	Page<User> findAll(String appId, String spaceId, int pageNumber, int pageSize);

	Page<UserDetail> findAllDetail(String name, String mobile, int pageNumber, int pageSize);

	void saveFailed(UserFailed failed);

	/**
	 * @param appId
	 *            应用
	 * @param user
	 *            用户
	 * @param password
	 *            密文密码
	 */
	void changePasswordByAppAndUser(String appId, User user, String password);

	/**
	 * @param user
	 * @param secondUID
	 */
	void changeSecondUIDByUser(User user, String secondUID);

	int getUserDetailCount();

	/**
	 * 用户开通app统计
	 *
	 * @return
	 */
	ModelMap getUserAppCount();

	/**
	 * 通过企业名称查询企业员工的信息
	 *
	 * @param name
	 * @param pageNumber
	 * @return
	 */
	List<UserSpaceDetailInfo> findByEnNameAndPageNumber(String name, Integer pageNumber);

	/**
	 * 通过企业营业执照查询企业员工的信息
	 *
	 * @param businessCode
	 * @return
	 */
	List<User> findByBusinessCode(String businessCode);

	Integer getEnterpriseCount();

	Integer getPersonalUserCount();

	Integer getUuUserCount();

	/**
	 * 锁定用户邮箱
	 * @param email 需要锁定的邮箱
	 */
	void lockEmail(String email);

	/**
	 * 锁定用户手机号
	 * @param tel 需要锁定的手机号
	 */
	void lockTel(String tel);

	/**
	 * 锁定用户UU号
	 * @param uu 需要锁定的UU号
	 */
	void lockUU(String uu);

	/**
	 * 判断邮箱是否被锁定
	 * @param email 需要判断的邮箱
	 */
	boolean isLockEmail(String email);

	/**
	 * 判断手机号是否被锁定
	 * @param tel 需要判断的手机号
	 */
	boolean isLockTel(String tel);

	/**
	 * 判断手机号是否被锁定
	 * @param uu 需要判断的uu号
	 */
	boolean isLockUU(String uu);

    User findHrInfo(String businessCode);

    String getUserUUByImId(Long imId);
}
