//go:generate ${GOBIN}/dummygen -d=api_dummy.go -package=api ${GO_MODULE}/pkg/service/privilege/api PrivilegeServiceAPI
package api

import (
	"context"

	privent "github.com/tidbcloud/devops/entity/privilege"
)

type RequestPrivilegeParam struct {
	Source       string
	Reason       string
	ExpiredAt    int64
	Applicant    string
	BindingUsers []string

	Approval *RequestApprovalPrivilegeParam
}

type RequestApprovalPrivilegeParam struct {
	Scopes []privent.ApprovalPrivilegeScope
}

type ListPrivilegesParam struct {
	PhaseIn        []privent.PrivilegePhase
	PhaseNotIn     []privent.PrivilegePhase
	BindingUserHas *string
	SourceIs       *string
	SourceLike     *string

	Page    int
	PerPage int
}

type PrivilegeServiceAPI interface {
	GetPrivilege(ctx context.Context, id uint64) (*privent.Privilege, error)
	ListPrivileges(ctx context.Context, param ListPrivilegesParam) ([]*privent.Privilege, int64, error)
	RequestPrivilege(ctx context.Context, param RequestPrivilegeParam) (*uint64, error)
	// RevokePrivilege revokes the whole privilege
	RevokePrivilege(ctx context.Context, id uint64) error
	// UnbindingUserOfPrivilege unbinds a user from a privilege
	UnbindingUsersOfPrivilege(ctx context.Context, id uint64, emails []string) ([]string, error)
}
