package infra

import (
	"github.com/pingcap-inc/clinic/pkg/datasource"
	"github.com/pingcap-inc/clinic/pkg/db"
	"github.com/pingcap/log"
	"github.com/tidbcloud/chaos-svc/idl/pbgen/proto/chaos"
	"go.uber.org/zap"

	"github.com/pingcap-inc/chaosAPI/pkg/infra/client"
	chaosdb "github.com/pingcap-inc/chaosAPI/pkg/infra/db"
)

func Setup(config Config) chaos.ChaosServiceClient {
	log.SetLevel(config.LogLevel)

	err := db.Initialize(&config.ClinicDBConfig, true)
	if err != nil {
		log.Error("init db failed", zap.Error(err))
	}

	err = chaosdb.Initialize(&config.ChaosDBConfig, false)
	if err != nil {
		log.Error("init chaos api db failed", zap.Error(err))
	}

	err = datasource.Initialize(config.DBaasConfig)
	if err != nil {
		log.Error("init datasource failed", zap.Error(err))
	}

	chaosClient, err := client.GetChaosSvcGrpcClient(config.ChaosGrpcTarget)
	if err != nil {
		log.Fatal("init chaos client failed", zap.Error(err))
		return nil
	}

	return chaosClient
}
