package db_info

type TispectorCluster struct {
	ID          int64  `json:"id" gorm:"column:id"`
	Name        string `json:"name" gorm:"column:name"`
	Description string `json:"description" gorm:"column:description"`
	Addr        string `json:"addr" gorm:"column:addr"` //ip : port
	User        string `json:"user" gorm:"column:user"`
	Pwd         string `json:"pwd" gorm:"column:pwd"`

	Ct       int64  `json:"ct" gorm:"column:ct"`
	Ut       int64  `json:"ut" gorm:"column:ut"`
	Operator string `json:"operator" gorm:"column:operator"`
}

type ClusterDao interface {
	AddCluster(cluster *TispectorCluster) (int64, error)
	UpdateCluster(cluster *TispectorCluster) error
	DelCluster(id int64) error
	GetClusterByName(clusterName string) (*TispectorCluster, error)
	ListCluster() ([]TispectorCluster, error)
}

var clusterDao ClusterDao

func SetClusterDao(impl ClusterDao) {
	clusterDao = impl
}

func AddCluster(cluster *TispectorCluster) (int64, error) {
	// cryptoData, err := util.AesCrypto([]byte(cluster.Pwd))
	// if err != nil {
	// 	return 0, err
	// }

	// cluster.Pwd = util.StringifyByteDirectly(cryptoData)
	return clusterDao.AddCluster(cluster)
}

func UpdateCluster(cluster *TispectorCluster) error {
	// if cluster.Pwd != "" {
	// 	cryptoData, err := util.AesCrypto([]byte(cluster.Pwd))
	// 	if err != nil {
	// 		return err
	// 	}

	// 	cluster.Pwd = util.StringifyByteDirectly(cryptoData)
	// }

	return clusterDao.UpdateCluster(cluster)
}

func DelCluster(id int64) error {
	return clusterDao.DelCluster(id)
}

func GetClusterByName(name string) (*TispectorCluster, error) {
	cluster, err := clusterDao.GetClusterByName(name)
	if err != nil {
		return nil, err
	}

	// deCryptoData, err := util.AesDeCrypto(util.ParseStringedByte(cluster.Pwd))
	// if err != nil {
	// 	return nil, err
	// }
	// cluster.Pwd = string(deCryptoData)
	return cluster, nil
}

func ListCluster() ([]TispectorCluster, error) {
	return clusterDao.ListCluster()
}
