package user

import (
	"fmt"
	"os"
	"testing"

	"github.com/pingcap/log"
	"go.uber.org/zap"

	"github.com/pingcap-inc/clinic/pkg/config"
	"github.com/pingcap-inc/clinic/pkg/db_docker"
	"github.com/pingcap-inc/clinic/pkg/db_docker/db/impl"
	"github.com/pingcap-inc/clinic/pkg/es"
	"github.com/pingcap-inc/clinic/pkg/rbac"
)

func TestMain(m *testing.M) {
	fmt.Println("start tests")
	impl.ReleaseAll()
	es.StopAllESKibanaDocker()

	_ = db_docker.TryInitDB()
	err := es.StartEsDocker()
	if err != nil {
		log.Error("failed to start es docker", zap.Error(err))
	}

	err = es.StartKibanaDocker()
	if err != nil {
		log.Error("failed to start kibana docker", zap.Error(err))
	}
	code := m.Run()
	es.StopAllESKibanaDocker()
	impl.ReleaseAll()
	os.Exit(code)
}

/*
func initService() {
	service.rbac = initAuth()
	service.cfg = &config.Config{
		SinkConfig: config.SinkConfig{
			LogConfig: config.LogConfig{
				Endpoint: fmt.Sprintf("http://%s:%d", "127.0.0.1", es.EsPort),
				KibanaConfig: config.KibanaConfig{
					AddressConfig: config.AddressConfig{
						Host: "127.0.0.1",
						Port: es.KibanaPort,
					},
				},
				User:     "test",
				Password: "test",
			},
		},
	}
}*/

func initAuth() *rbac.AuthCasbin {
	cfg := &config.Config{
		DBConfig: &config.DBConfig{
			User:     "root", // centralDockerDB.User,
			Host:     db_docker.DockerDB.Host,
			Port:     db_docker.DockerDB.Port,
			Password: db_docker.DockerDB.Password,
			Database: "unittest",
		},
	}
	auth, err := rbac.InitAuth(cfg.DBConfig, "../../../rbac_model")
	if err != nil {
		panic(err)
	}
	err = auth.AttachRoleForUser(1, 1, 1)
	if err != nil {
		panic(err)
	}
	err = auth.AttachRoleForUser(2, 2, 2)
	if err != nil {
		panic(err)
	}
	return auth
}
