package dbutil

import (
	"github.com/pingcap/errcode"
	"github.com/pingcap/errors"
	"github.com/tidbcloud/dataflow-service/app/repo/entity"
	"github.com/tidbcloud/dataflow-service/pkg/account/accounttypes"
	"gorm.io/gorm"
)

// TagNotFound wraps the `gorm.ErrRecordNotFound` to a new error type.
func TagNotFound(err error) error {
	if err == gorm.ErrRecordNotFound {
		return errcode.NewNotFoundErr(err)
	}
	return errors.WithStack(err)
}

// CheckResourceOrgIDAndProjectID
// todo: this should be checked before we query anything, maybe merge with UserContext.CheckCluster
func CheckResourceOrgIDAndProjectID(orgID, resourceOrgID, projectID, resourceProjectID entity.ID) error {
	if orgID != resourceOrgID || projectID != resourceProjectID {
		return errcode.NewForbiddenErr(errors.New("you do not have permission to access this resource"))
	}
	return nil
}

func UserInProject(userProjects []accounttypes.Project, projectID entity.ID) bool {
	userInProject := false
	for _, project := range userProjects {
		if project.ID == projectID.Uint64() {
			userInProject = true
		}
	}
	return userInProject
}

func CheckProjectID(userProjects []accounttypes.Project, projectID entity.ID) error {
	userInProject := UserInProject(userProjects, projectID)
	if userInProject {
		return nil
	}

	return errcode.NewForbiddenErr(errors.New("you do not have permission to access this project"))
}
