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

package jobqueue

import (
	"fmt"
)

var (
	ErrMissingDependency            = fmt.Errorf("missing dependency")
	ErrCycleDetected                = fmt.Errorf("cycle detected")
	ErrQueueEmpty                   = fmt.Errorf("queue is empty")
	ErrJobAlreadyExists             = fmt.Errorf("job already exists")
	ErrWorkerNotRunning             = fmt.Errorf("worker is not running")
	ErrMaxJobsReached               = fmt.Errorf("maximum number of jobs reached")
	ErrWorkerAlreadyRunning         = fmt.Errorf("worker is already running")
	ErrWorkerAlreadyAdded           = fmt.Errorf("worker is already added")
	ErrWorkerNotAdded               = fmt.Errorf("worker is not added")
	ErrNoWorkers                    = fmt.Errorf("no workers")
	ErrWorkerAlreadyStopped         = fmt.Errorf("worker is already stopped")
	ErrManagerAlreadyStopped        = fmt.Errorf("manager is already stopped")
	ErrManagerAlreadyRunning        = fmt.Errorf("manager is already running")
	ErrManagerNotRunning            = fmt.Errorf("manager is not running")
	ErrJobNotScheduled              = fmt.Errorf("job is not scheduled")
	ErrCronNotInitialized           = fmt.Errorf("cron is not initialized")
	ErrCPUPercentage                = fmt.Errorf("cpu percentage must be between 0 and 100")
	ErrIntervalIsZero               = fmt.Errorf("interval must be greater than 0")
	ErrUnknownRunnableType          = fmt.Errorf("unknown runnable type")
	ErrUnknownSchedulerType         = fmt.Errorf("unknown scheduler type")
	ErrUnsupportedDatabaseType      = fmt.Errorf("unsupported database type")
	ErrUnsupportedFileOption        = fmt.Errorf("unsupported file option")
	ErrUnsupportedCredentialType    = fmt.Errorf("unsupported credential type")
	ErrUnsupportedTransferDirection = fmt.Errorf("unsupported transfer direction")
	ErrInvalidData                  = fmt.Errorf("invalid data")
	ErrUnknownFormat                = fmt.Errorf("unknown format")
	ErrFailedToCreateTempFile       = fmt.Errorf("failed to create temp file")
	ErrFailedToWriteTempFile        = fmt.Errorf("failed to write temp file")
	ErrJobAlreadyScheduled          = fmt.Errorf("job already scheduled")
	ErrNoDatabaseConnection         = fmt.Errorf("no database connection")
	ErrDBSaverNotRunning            = fmt.Errorf("dbsaver is not running")
	ErrDBSaverNotInitialized        = fmt.Errorf("dbsaver is not initialized")
	ErrSchedulerNotSet              = fmt.Errorf("scheduler is not set")
	ErrJobNotActive                 = fmt.Errorf("job is not active")
	ErrJobAlreadyActive             = fmt.Errorf("job is already active")
	ErrChannelAlreadyClosed         = fmt.Errorf("the channel is already closed")
	ErrUnknownScheduleType          = fmt.Errorf("unknown schedule type")
	ErrNoManager                    = fmt.Errorf("no manager")
	ErrCannotLoadStatsFromDatabase  = fmt.Errorf("errors while loading stats from database")
	ErrInvalidTime                  = fmt.Errorf("invalid time")
	ErrSchedulerMisconfiguration    = fmt.Errorf("scheduler misconfiguration")
	ErrInvalidDuration              = fmt.Errorf("invalid duration")
	ErrJobSyncerAlreadyRunning      = fmt.Errorf("JobSyncer is already running")
	ErrJobSyncerNotRunning          = fmt.Errorf("JobSyncer is not running")
	ErrMaxRetriesReached            = fmt.Errorf("maximum number of retries reached")
	ErrTimeoutReached               = fmt.Errorf("timeout reached")
	ErrFailedToCreate               = fmt.Errorf("failed to create")
	ErrFailedToQueryExistingJob     = fmt.Errorf("failed to query an existing job")
	ErrFailedToSaveJob              = fmt.Errorf("failed to save a job")
	ErrScheduleTimeIsInThePast      = fmt.Errorf("scheduled time is in the past")
	ErrParameterIsNil               = fmt.Errorf("parameter is nil")
	ErrJobIDEmpty                   = fmt.Errorf("job ID is empty")
	ErrManagerNotInitialized        = fmt.Errorf("manager is not initialized")
	ErrJobSyncerNotInitialized      = fmt.Errorf("JobSyncer is not initialized")
)