package op

import (
	"errors"

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

func ListOrganizations(ctx *session.CtxUser, filter view.QueryFilter) (any, int64, error) {
	cond, ok := filter.ExtraFilter.(*model.ListOrganizationsCondition)
	if !ok {
		return nil, 0, errors.New("unsupported extra filter type")
	}
	cond.Page = filter.Page
	cond.PerPage = filter.Limit

	return internal.ListOrganizations(cond)
}

func LastUpdatedTime(org *db.Organization) (int, int64, error) {
	if org.OrgType == string(view.CloudDataSource) {
		return 0, 0, errors.New("wrong data source")
	}

	return model.LastUpdatedTime(org.ID)
}

func GetOrganization(orgID uint) (*db.Organization, error) {
	return internal.GetOrganization(orgID)
}
