package ink.wgink.login.oauth2.server.service;

import ink.wgink.login.oauth2.server.pojo.dtos.OAuth2ClientDTO;
import ink.wgink.login.oauth2.server.pojo.dtos.OAuth2ClientSimpleDTO;
import ink.wgink.login.oauth2.server.pojo.pos.OAuth2ClientPO;
import ink.wgink.login.oauth2.server.pojo.vos.OAuth2ClientVO;
import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.result.SuccessResultList;

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

/**
 * @ClassName: IOauthClientService
 * @Description: Oauth客户端
 * @Author: WangGeng
 * @Date: 2019/3/12 11:40 AM
 * @Version: 1.0
 **/
public interface IOAuth2ClientService {

    /**
     * 客户端加密规则
     */
    String OAUTH_CLIENT_RULE = "WGINK_oauth2";
    /**
     * 正常环境
     */
    String OAUTH_CLIENT_ENVIRONMENT_FORMAL = "formal";
    /**
     * 测试环境
     */
    String OAUTH_CLIENT_ENVIRONMENT_TEST = "test";
    /**
     * 内部系统
     */
    String OAUTH_CLIENT_SYSTEM_TYPE_WITHIN = "within";
    /**
     * 三方系统
     */
    String OAUTH_CLIENT_SYSTEM_TYPE_THIRD = "third";
    /**
     * 状态正常
     */
    String OAUTH_CLIENT_SYSTEM_STATE_NORMAL = "normal";
    /**
     * 状态锁定
     */
    String OAUTH_CLIENT_SYSTEM_STATE_LOCKING = "locking";

    /**
     * Oauth客户端新增
     *
     * @param params
     * @return
     * @throws Exception
     */
    void save(OAuth2ClientVO oauth2ClientVO) throws Exception;

    /**
     * Oauth客户端修改
     *
     * @param ids
     * @return
     */
    void remove(List<String> ids);

    /**
     * Oauth客户端修改
     *
     * @param clientId
     * @param oauth2ClientVO
     * @return
     * @throws Exception
     */
    void update(String clientId, OAuth2ClientVO oauth2ClientVO) throws Exception;

    /**
     * Oauth 更新初始化菜单
     *
     * @param clientId
     * @param menuId
     * @return
     */
    void updateMenuInit(String clientId, String menuId);

    /**
     * 清空Oauth客户端菜单
     *
     * @param clientId
     * @return
     */
    void updateMenuEmpty(String clientId);

    /**
     * Oauth客户端列表
     *
     * @param params
     * @return
     */
    List<OAuth2ClientDTO> list(Map<String, Object> params);


    /**
     * Oauth客户端列表（简单）
     *
     * @param params
     * @return
     */
    List<OAuth2ClientSimpleDTO> listSimple(Map<String, Object> params);

    /**
     * Oauth客户端列表（简单）
     *
     * @return
     */
    List<OAuth2ClientSimpleDTO> listSimple();

    /**
     * Oauth客户端列表（简单）
     *
     * @param environment
     * @return
     */
    List<OAuth2ClientSimpleDTO> listSimpleByEnvironment(String environment);

    /**
     * Oauth客户端列表（简单）
     *
     * @param menuIds
     * @return
     */
    List<OAuth2ClientSimpleDTO> listSimpleByMenuIds(List<String> menuIds);

    /**
     * Oauth客户端列表（简单）
     *
     * @param rootMenuIds
     * @param environment
     * @return
     */
    List<OAuth2ClientSimpleDTO> listSimpleByMenuIdsAndEnvironment(List<String> rootMenuIds, String environment);

    /**
     * easyUI Oauth客户端列表
     *
     * @param page
     * @return
     */
    SuccessResultList<List<OAuth2ClientDTO>> listPage(ListPage page);


    /**
     * Oauth客户端详情
     *
     * @param params
     * @return
     * @throws Exception
     */
    OAuth2ClientDTO get(Map<String, Object> params) throws Exception;

    /**
     * 获取Oauth
     *
     * @param clientId
     * @return
     * @throws Exception
     */
    OAuth2ClientDTO get(String clientId) throws Exception;

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

    /**
     * OAuth2详情
     *
     * @param clientId
     * @return
     */
    OAuth2ClientPO getPO(String clientId);

    /**
     * Oauth客户端初始化信息
     *
     * @return
     * @throws Exception
     */
    OAuth2ClientDTO getInit() throws Exception;

    /**
     * Oauth客户端统计
     *
     * @param params
     * @return
     */
    Integer count(Map<String, Object> params);


}
