package es

import (
	"github.com/elastic/go-elasticsearch/v6"
	"github.com/pingcap/log"
	"go.uber.org/zap"
	"sync"
)

type ESConf struct {
	URL                  string
	TiDBLogIndexPrefix   string
	SystemLogIndexPrefix string
	SlowLogIndexPrefix   string
	AuditLogIndexPrefix  string

	Name     string
	Password string
}

var (
	client *elasticsearch.Client
	mux    sync.Mutex
)

func GetClient(conf ESConf) (*elasticsearch.Client, error) {
	if client != nil {
		return client, nil
	}

	mux.Lock()
	defer mux.Unlock()

	if client != nil {
		return client, nil
	}
	cfg := elasticsearch.Config{
		Addresses: []string{conf.URL},
	}

	var err error
	client, err = elasticsearch.NewClient(cfg)
	if err != nil {
		log.Warn("create es client failed.", zap.String("url", conf.URL), zap.Error(err))
		return nil, err
	}

	return client, nil
}
