package open

import (
	"context"

	"github.com/tidbcloud/dataflow-service/pkg/account"
	"github.com/tidbcloud/dataflow-service/pkg/account/accounttypes"
	"github.com/tidbcloud/pkgv2/bizerr"
	"github.com/tidbcloud/pkgv2/db"
)

const (
	defaultPageValue     int32 = 1
	defaultPageSizeValue int32 = 10
)

type BaseController struct {
	trans db.TransProvider
}

func (s *BaseController) CheckAndSetPageDefaultValue(page int32) (int32, bizerr.BizError) {
	if page == 0 {
		return defaultPageValue, nil
	}
	if page < 0 {
		return 0, bizerr.New(bizerr.ErrCodeParams, "page is invalid")
	}
	return page, nil
}

func (s *BaseController) CheckAndSetPageSizeDefaultValue(pageSize int32) (int32, bizerr.BizError) {
	if pageSize == 0 {
		return defaultPageSizeValue, nil
	}
	if pageSize < 0 || pageSize > 100 {
		return 0, bizerr.New(bizerr.ErrCodeParams, "pageSize is invalid")
	}

	return pageSize, nil
}

func (s *BaseController) CheckProjectID(ctx context.Context, projectID uint64) bizerr.BizError {
	user := account.GetUserFromContext(ctx)
	if s.userInProject(user.Projects, projectID) {
		return nil
	}
	return bizerr.New(bizerr.ErrCodePermission,
		"you do not have permission to access this project, project_id: %d", projectID)
}

func (s *BaseController) userInProject(userProjects []accounttypes.Project, projectID uint64) bool {
	for _, project := range userProjects {
		if project.ID == projectID {
			return true
		}
	}
	return false
}
