// Copyright © 2023 OpenIM. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package cmd

import (
	"strings"
)

var (
	FileName                         string
	NotificationFileName             string
	ShareFileName                    string
	WebhooksConfigFileName           string
	LocalCacheConfigFileName         string
	KafkaConfigFileName              string
	RedisConfigFileName              string
	MongodbConfigFileName            string
	MinioConfigFileName              string
	LogConfigFileName                string
	OpenIMAPICfgFileName             string
	OpenIMCronTaskCfgFileName        string
	OpenIMMsgGatewayCfgFileName      string
	OpenIMMsgTransferCfgFileName     string
	OpenIMPushCfgFileName            string
	OpenIMRPCAuthCfgFileName         string
	OpenIMRPCConversationCfgFileName string
	OpenIMRPCFriendCfgFileName       string
	OpenIMRPCGroupCfgFileName        string
	OpenIMRPCMsgCfgFileName          string
	OpenIMRPCThirdCfgFileName        string
	OpenIMRPCUserCfgFileName         string
	DiscoveryConfigFilename          string
)

var ConfigEnvPrefixMap map[string]string

func init() {
	FileName = "config.yaml"
	NotificationFileName = "notification.yml"
	ShareFileName = "share.yml"
	WebhooksConfigFileName = "webhooks.yml"
	LocalCacheConfigFileName = "local-cache.yml"
	KafkaConfigFileName = "kafka.yml"
	RedisConfigFileName = "redis.yml"
	MongodbConfigFileName = "mongodb.yml"
	MinioConfigFileName = "minio.yml"
	LogConfigFileName = "log.yml"
	OpenIMAPICfgFileName = "openim-api.yml"
	OpenIMCronTaskCfgFileName = "openim-crontask.yml"
	OpenIMMsgGatewayCfgFileName = "openim-msggateway.yml"
	OpenIMMsgTransferCfgFileName = "openim-msgtransfer.yml"
	OpenIMPushCfgFileName = "openim-push.yml"
	OpenIMRPCAuthCfgFileName = "openim-rpc-auth.yml"
	OpenIMRPCConversationCfgFileName = "openim-rpc-conversation.yml"
	OpenIMRPCFriendCfgFileName = "openim-rpc-friend.yml"
	OpenIMRPCGroupCfgFileName = "openim-rpc-group.yml"
	OpenIMRPCMsgCfgFileName = "openim-rpc-msg.yml"
	OpenIMRPCThirdCfgFileName = "openim-rpc-third.yml"
	OpenIMRPCUserCfgFileName = "openim-rpc-user.yml"
	DiscoveryConfigFilename = "discovery.yml"

	ConfigEnvPrefixMap = make(map[string]string)
	fileNames := []string{
		FileName, NotificationFileName, ShareFileName, WebhooksConfigFileName,
		KafkaConfigFileName, RedisConfigFileName,
		MongodbConfigFileName, MinioConfigFileName, LogConfigFileName,
		OpenIMAPICfgFileName, OpenIMCronTaskCfgFileName, OpenIMMsgGatewayCfgFileName,
		OpenIMMsgTransferCfgFileName, OpenIMPushCfgFileName, OpenIMRPCAuthCfgFileName,
		OpenIMRPCConversationCfgFileName, OpenIMRPCFriendCfgFileName, OpenIMRPCGroupCfgFileName,
		OpenIMRPCMsgCfgFileName, OpenIMRPCThirdCfgFileName, OpenIMRPCUserCfgFileName, DiscoveryConfigFilename,
	}

	for _, fileName := range fileNames {
		envKey := strings.TrimSuffix(strings.TrimSuffix(fileName, ".yml"), ".yaml")
		envKey = "IMENV_" + envKey
		envKey = strings.ToUpper(strings.ReplaceAll(envKey, "-", "_"))
		ConfigEnvPrefixMap[fileName] = envKey
	}
}

const (
	FlagConf          = "config_folder_path"
	FlagTransferIndex = "index"
)