package datasource

import (
	"testing"

	"github.com/gin-gonic/gin"

	"go.uber.org/fx"
	"go.uber.org/fx/fxtest"

	"github.com/pingcap-inc/clinic/pkg/config"
	"github.com/pingcap-inc/clinic/pkg/proxy"
)

func TestFxModule(t *testing.T) {
	addrCfg := config.VMClusterAddressConfig{
		AddressConfig: config.AddressConfig{
			Host: "localhost",
			Port: 8080,
		},
	}

	cfg := &config.Config{
		SinkConfig: config.SinkConfig{
			MetricConfig: config.MetricConfig{
				VMClusterAddressConfig: addrCfg,
				SelectAddr: config.MetricSelectAddressConfig{
					OpAddress:    addrCfg,
					CloudAddress: addrCfg,
				},
			},
			LogConfig: config.LogConfig{
				Endpoint: "http://localhost:8082",
			},
		},
		DatasourceConfig: config.DatasourceConfig{
			MetricConfig: config.MetricConfig{
				VMClusterAddressConfig: addrCfg,
				SelectAddr: config.MetricSelectAddressConfig{
					OpAddress:    addrCfg,
					CloudAddress: addrCfg,
				},
			},
			LogConfig: config.DatasourceLogConfig{
				OpAddress: config.LogConfig{
					Endpoint: "http://localhost:8082",
				},
				CloudAddress: config.LogConfig{
					Endpoint: "http://localhost:8082",
				},
			},
		},
	}
	app := fxtest.New(
		t,
		fx.Supply(&gin.Default().RouterGroup, cfg, &proxy.TiDBClusterMetricHandler{}, &proxy.O11yProxyHandler{}),
		Module,
	)
	app.RequireStart()
	app.RequireStop()
}
