 package org.sky.common.constant;


import org.sky.core.launch.constant.AppConstant;

/**
 * 启动常量
 *
 * @author Chill
 */
public interface LauncherConstant {

	/**
	 * nacos 用户名
	 */
	String NACOS_USERNAME = "nacos";

	/**
	 * nacos 密码
	 */
	String NACOS_PASSWORD = "nacos";

	/**
	 * nacos dev 地址
	 */
	String NACOS_DEV_ADDR = "47.99.150.200:8848";

	String NACOS_DEV_NAMESPACE = "bc98aa53-bc32-4e17-bb82-605c8e95d336";

	String NACOS_HOME_ADDR = "47.99.150.200:8848";

	String NACOS_HOME_NAMESPACE = "9f24a600-102c-48f2-9e42-ac850986db45";

	/**
	 * nacos prod 地址
	 */
	String NACOS_PROD_ADDR = "172.30.0.48:8848";
	String NACOS_PROD_NAMESPACE = "6a3a2b86-c938-4188-b1ff-cd5f909c6b6c";

	/**
	 * nacos test 地址
	 */
	String NACOS_TEST_ADDR = "172.18.238.53:8848";

	String NACOS_TEST_NAMESPACE = "6a3a2b86-c938-4188-b1ff-cd5f909c6b6c";

	/**
	 * sentinel dev 地址
	 */
	String SENTINEL_DEV_ADDR = "127.0.0.1:8858";

	/**
	 * sentinel prod 地址
	 */
	String SENTINEL_PROD_ADDR = "172.30.0.58:8858";

	/**
	 * sentinel test 地址
	 */
	String SENTINEL_TEST_ADDR = "172.30.0.58:8858";

	/**
	 * seata dev 地址
	 */
	String SEATA_DEV_ADDR = "127.0.0.1:8091";

	/**
	 * seata prod 地址
	 */
	String SEATA_PROD_ADDR = "172.30.0.68:8091";

	/**
	 * seata test 地址
	 */
	String SEATA_TEST_ADDR = "172.30.0.68:8091";

	/**
	 * zipkin dev 地址
	 */
	String ZIPKIN_DEV_ADDR = "http://127.0.0.1:9411";

	/**
	 * zipkin prod 地址
	 */
	String ZIPKIN_PROD_ADDR = "http://172.30.0.71:9411";

	/**
	 * zipkin test 地址
	 */
	String ZIPKIN_TEST_ADDR = "http://172.30.0.71:9411";

	/**
	 * elk dev 地址
	 */
	String ELK_DEV_ADDR = "127.0.0.1:9000";

	/**
	 * elk prod 地址
	 */
	String ELK_PROD_ADDR = "172.30.0.72:9000";

	/**
	 * elk test 地址
	 */
	String ELK_TEST_ADDR = "172.30.0.72:9000";

	/**
	 * seata file模式
	 */
	String FILE_MODE = "file";

	/**
	 * seata nacos模式
	 */
	String NACOS_MODE = "nacos";

	/**
	 * seata default模式
	 */
	String DEFAULT_MODE = "default";

	/**
	 * seata group后缀
	 */
	String GROUP_NAME = "-group";

	/**
	 * seata 服务组格式
	 *
	 * @param appName 服务名
	 * @return group
	 */
	static String seataServiceGroup(String appName) {
		return appName.concat(GROUP_NAME);
	}

	/**
	 * 动态获取nacos地址
	 *
	 * @param profile 环境变量
	 * @return addr
	 */
	static String nacosAddr(String profile) {
		return switch (profile) {
			case (AppConstant.PROD_CODE) -> NACOS_PROD_ADDR;
			case (AppConstant.TEST_CODE) -> NACOS_TEST_ADDR;
			case (AppConstant.HOME_CODE) -> NACOS_HOME_ADDR;
			default -> NACOS_DEV_ADDR;
		};
	}

	static String nacosNamespace(String profile) {
		return switch (profile) {
			case (AppConstant.PROD_CODE) -> NACOS_PROD_NAMESPACE;
			case (AppConstant.TEST_CODE) -> NACOS_TEST_NAMESPACE;
			case (AppConstant.HOME_CODE) -> NACOS_HOME_NAMESPACE;
			default -> NACOS_DEV_NAMESPACE;
		};
	}

	/**
	 * 动态获取sentinel地址
	 *
	 * @param profile 环境变量
	 * @return addr
	 */
	static String sentinelAddr(String profile) {
		return switch (profile) {
			case (AppConstant.PROD_CODE) -> SENTINEL_PROD_ADDR;
			case (AppConstant.TEST_CODE) -> SENTINEL_TEST_ADDR;
			default -> SENTINEL_DEV_ADDR;
		};
	}

	/**
	 * 动态获取seata地址
	 *
	 * @param profile 环境变量
	 * @return addr
	 */
	static String seataAddr(String profile) {
		return switch (profile) {
			case (AppConstant.PROD_CODE) -> SEATA_PROD_ADDR;
			case (AppConstant.TEST_CODE) -> SEATA_TEST_ADDR;
			default -> SEATA_DEV_ADDR;
		};
	}

	/**
	 * 动态获取zipkin地址
	 *
	 * @param profile 环境变量
	 * @return addr
	 */
	static String zipkinAddr(String profile) {
		return switch (profile) {
			case (AppConstant.PROD_CODE) -> ZIPKIN_PROD_ADDR;
			case (AppConstant.TEST_CODE) -> ZIPKIN_TEST_ADDR;
			default -> ZIPKIN_DEV_ADDR;
		};
	}

	/**
	 * 动态获取elk地址
	 *
	 * @param profile 环境变量
	 * @return addr
	 */
	static String elkAddr(String profile) {
		return switch (profile) {
			case (AppConstant.PROD_CODE) -> ELK_PROD_ADDR;
			case (AppConstant.TEST_CODE) -> ELK_TEST_ADDR;
			default -> ELK_DEV_ADDR;
		};
	}

}
