package op

import (
	"errors"

	"github.com/pingcap-inc/clinic/pkg/datasource/internal/op/internal"
	model2 "github.com/pingcap-inc/clinic/pkg/datasource/model"
	"github.com/pingcap-inc/clinic/pkg/datasource/view"
	"github.com/pingcap-inc/clinic/pkg/db"
	"github.com/pingcap-inc/clinic/pkg/db/model"
)

func ListClusters(filter view.QueryFilter) ([]db.Cluster, int64, error) {
	cond, ok := filter.ExtraFilter.(*view.ListClusterFilter)
	if !ok {
		return nil, 0, errors.New("unsupport extra filter type")
	}

	org, orgErr := internal.GetOrganization(cond.OrgID)
	if orgErr != nil {
		return nil, 0, orgErr
	}

	if org.OrgType == string(view.CloudDataSource) {
		return nil, 0, errors.New("wrong data source")
	}

	opClusters, opTotal, err := model2.ListClusters(cond.Query, cond.OrgID, cond.ProjectID,
		filter.Page, filter.Limit,
		cond.HideServerlessTier, cond.HideDeleted)
	if err != nil {
		return nil, 0, err
	}
	return opClusters, opTotal, nil
}

func GetCluster(idStr string, org *db.Organization) (*db.Cluster, error) {
	//if org.OrgType == string(view.CloudDataSource) {
	//	return nil, errors.New("wrong data source")
	//}

	c, err := model.GetCluster(idStr)
	if err != nil {
		return nil, err
	}
	return c, nil
}
