package com.sonic.common.client;

import com.sonic.common.enums.AppEnv;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotEmpty;
import java.util.List;
import java.util.Optional;
import java.util.Set;

/**
 * @author chenjun
 */
public interface AppCenterClient {
    /**
     * 获取token，rpcClient本身已经集成了获取token的过程，该方法一般不会用到
     */
    String token();

    /**
     * 获取App列表
     *
     * @param listReq 查询参数
     * @return
     */
    List<App> list(ListReq listReq);

    /**
     * 根据 appId 获取 App 信息
     *
     * @param appId
     * @return
     */
    Optional<App> getById(String appId);

    /**
     * 根据appEnv,appId，获取对应host，其中，appEnv在client构建时已经指定
     *
     * @param appId
     * @return
     */
    String getNameByAppId(String appId);

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    class ListReq {
        @NotEmpty
        List<String> appIds;
        AppEnv appEnv;
        String tag;
    }

    @NoArgsConstructor
    @Data
    @Builder
    @AllArgsConstructor
    class App {
        private String id;
        private String displayName;
        private String serviceName;
        private String host;
        private String steinName;
        private AccessType accessType;
        private String owner;
        private String dept;
        private Status status;
        private Set<String> tags;
        private String ext;
        private String deptEmails;
    }

    enum AccessType {
        PUBLIC, PRIVATE
    }

    enum Status {
        ENABLED,
        DISABLED,
        ;
    }
}
