// Copyright 2023 schukai GmbH
// SPDX-License-Identifier: AGPL-3.0

package jobqueue

import (
	"context"
	"time"
)

type GenericJob interface {
	GetID() JobID

	GetDependencies() []JobID

	GetPriority() Priority

	Execute(ctx context.Context) (RunGenericResult, error)

	Cancel() error

	GetMaxRetries() uint

	GetRetryDelay() *time.Duration

	GetTimeout() *time.Duration

	GetPersistence() JobPersistence

	SetScheduler(scheduler Scheduler)

	GetScheduler() Scheduler

	Pause()

	PauseUntil(until time.Time)

	Resume()

	IsPaused() bool

	ResetStats()

	GetStats() JobStats
}