package com.uas.account.service;

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

import java.util.List;
import java.util.Set;

public interface UserSpaceService {

	boolean save(UserSpace userSpace, UserSpaceDetail spaceDetail, Set<String> apps);

	UserSpace findOne(String appId, String uid);

	List<UserSpace> findByUID(String uid);

	UserSpace findByDialectUID(String appId, String dialectUID);

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

	/**
	 * 注册企业信息到应用
	 * 
	 * @param userSpaceDetail
	 * @return
	 */
	UserSpaceDetail register(UserSpaceDetail userSpaceDetail);

	/**
	 * 用移动设备注册企业信息到应用
	 * 
	 * @param userSpaceDetail
	 * @return
	 */
	UserSpaceDetail registerByMobile(UserSpaceDetail userSpaceDetail);

	void delete(UserSpaceDetail userSpaceDetail);

	/**
	 * 删除企业开通的应用
	 * 
	 * @param userSpace
	 */
	void delete(UserSpace userSpace);

	/**
	 * 更新
	 * 
	 * @param userSpaceDetail
	 * @return
	 */
	UserSpaceDetail save(UserSpaceDetail userSpaceDetail);

	/**
	 * 查找企业详细信息
	 * 
	 * @param businessCode
	 *            注册号
	 * @return
	 */
	UserSpaceDetail findByBusinessCode(String businessCode);

	/**
	 * 通过id查找企业详情
	 * 
	 * @param id
	 * @return
	 */
	UserSpaceDetail findById(Long id);

	/**
	 * 查找企业详细信息
	 * 
	 * @param domain
	 *            域名
	 * @return
	 */
	UserSpaceDetail findByDomain(String domain);

	/**
	 * 查找企业详细信息
	 * 
	 * @param name
	 *            注册号
	 * @return
	 */
	UserSpaceDetail findByName(String name);

	/**
	 * 已审批且已激活
	 * 
	 * @param pageNumber
	 * @param pageSize
	 * @return
	 */
	Page<UserSpaceDetailView> findAllEnable(String name, String businessCode, int pageNumber, int pageSize);

	/**
	 * 已审批且未激活
	 * 
	 * @param pageNumber
	 * @param pageSize
	 * @return
	 */
	Page<UserSpaceDetailView> findAllUnActive(String name, String businessCode, int pageNumber, int pageSize);

	/**
	 * 待审批
	 * 
	 * @param pageNumber
	 * @param pageSize
	 * @return
	 */
	Page<UserSpaceDetailView> findAllUnAudit(String name, String businessCode, int pageNumber, int pageSize);

	/**
	 * 审批失败
	 * 
	 * @param pageNumber
	 * @param pageSize
	 * @return
	 */
	Page<UserSpaceDetailView> findAllUnApply(String name, String businessCode, int pageNumber, int pageSize);

	/**
	 * 激活
	 * 
	 * @param businessCode
	 */
	void enable(String businessCode);

	/**
	 * 通过id查找企业信息审批通过
	 * 
	 * @param id
	 */
	void enable(Long id);

	/**
	 * 不予通过
	 * 
	 * @param id
	 * @param reason
	 */
	void disable(Long id, String reason);

	/**
	 * 初始化企业应用
	 * 
	 * @return
	 */
	UserSpaceAndUserInfo initUserSpaceDetail(UserSpaceDetail detail, String adminPassword, List<UserDetail> users);

	/**
	 * 开通应用
	 * 
	 * @param businessCode
	 * @param app
	 */
	void applyApp(String businessCode, String app, String adminPassword, List<UserDetail> users);

	/**
	 * 调用应用接口，传输企业数据过去
	 * 
	 * @param app
	 *            应用
	 * @param userSpace
	 *            与应用相关的企业信息
	 * @param spaceDetail
	 *            通用的企业详细信息
	 * @return
	 * @throws Exception
	 */
	UserSpace callbackToApp(App app, UserSpace userSpace, UserSpaceDetail spaceDetail) throws Exception;

	/**
	 * 企业开通应用统计
	 * 
	 * @return
	 */
	ModelMap getUserSpaceAppCount();

	/**
	 * 查找所有企业的信息
	 * 
	 * @param name
	 * @param businessCode
	 * @param pageNumber
	 * @param pageSize
	 * @return
	 */
	Page<UserSpaceDetailView> findAll(String name, String businessCode, String address, int pageNumber, int pageSize);

	/**
	 * 通过关键词查询所有企业信息
	 * 
	 * @param keyword
	 * @return
	 */
	Page<UserSpaceDetail> findByKeyword(String keyword, int pageNumber, int pageSize);

	/**
	 * 通过id查询企业信息（方便平台搜索调用）
	 * 
	 * @param ids
	 * @return
	 */
	public List<UserSpaceDetail> findAll(String ids);

	/**
	 * 更新企业信息后同步到相关应用
	 * 
	 * @param detail
	 * @return
	 * @throws Exception
	 */
	public String callbacktoAppAfterUpdate(App app, UserSpaceDetail detail) throws Exception;

	/**
	 * uu互联接口，通过手机号查询相关的企业的信息
	 * 
	 * @param tels
	 * @return
	 */
	public List<UserSpaceDetailInfo> findByTel(List<String> tels);

	/**
	 * uu互联接口，通过手机号查询企业和个人的相关信息
	 * 
	 * @param tels
	 * @return
	 */
	public List<UserSpaceDetailInfo> findUserByTel(List<String> tels);

	/**
	 * uu互联接口，通企业名称查询相关企业信息
	 * 
	 * @param tel
	 * @param pageNumber
	 * @return
	 */
	public List<UserSpaceDetailInfo> findByKeyword(String tel, Integer pageNumber);

	/**
	 * 更新userSpace
	 * 
	 * @param space
	 */
	void saveUserSpace(UserSpace space);

	/**
	 * 更新ac$userspaces信息
	 * 
	 * @param space
	 * @param id
	 */
	void update(UserSpace space, Long id);

}
