package config

import (
	"testing"

	"github.com/onsi/gomega"
	"github.com/tidbcloud/pkgv2/gormutil"
)

func TestMergeConfig(t *testing.T) {
	g := gomega.NewWithT(t)
	cfg := &Config{
		ProxyConfig: ProxyConfig{
			Auth0Domain:   "123",
			Auth0ClientID: "456",
		},
		CoreSvcSecretStore: &SecretConfig{
			SecretKey: "dbaas",
		},
		ServerConfig: ServerConfig{
			SecretStore: &SecretConfig{
				SecretKey: "management-service",
			},
		},
		MysqlConfig: gormutil.Config{
			User:     "management",
			Database: "management",
		},
	}

	err := NormalizeConfigSetup(cfg, loadConfig)
	g.Expect(err).To(gomega.Succeed())
	g.Expect(cfg.ProxyConfig.Auth0Domain).To(gomega.Equal("123"))
	g.Expect(cfg.ProxyConfig.Auth0ClientID).To(gomega.Equal("456"))
	g.Expect(cfg.ProxyConfig.Auth0ClientSecret).To(gomega.Equal("dbaas"))
	g.Expect(cfg.MysqlConfig.User).To(gomega.Equal("management"))
	g.Expect(cfg.MysqlConfig.Host).To(gomega.Equal("management-service"))
	g.Expect(cfg.MysqlConfig.Password).To(gomega.Equal("management-service"))
	g.Expect(cfg.MysqlConfig.Database).To(gomega.Equal("management-service"))
}

func loadConfig(key1, _ string) (*Config, error) {
	if key1 == "dbaas" {
		return &Config{
			MysqlConfig: gormutil.Config{
				Password: "dbaas",
				Host:     "dbaas",
				Database: "dbaas",
			},
			ProxyConfig: ProxyConfig{
				Auth0ClientID:     "dbbas",
				Auth0Domain:       "dbaas",
				Auth0ClientSecret: "dbaas",
			},
		}, nil
	}

	return &Config{
		MysqlConfig: gormutil.Config{
			Password: "management-service",
			Host:     "management-service",
			Database: "management-service",
		},
	}, nil
}
