package constant

import (
	"time"

	"github.com/robfig/cron/v3"
)

const (
	BackupIDPrefix  = "bak-"
	RestoreIDPrefix = "res-"

	// KubernetesUnknown is the placeholder value for a backup schedule whose
	// Kubernetes target has not been resolved yet. It is used as a pending
	// marker before the cluster-created event provides the real kubernetes.
	KubernetesUnknown = "unknown"
)

type BackupJobState string

const (
	BackupJobStateSucceeded BackupJobState = "succeeded"
	BackupJobStateFailed    BackupJobState = "failed"
	BackupJobStatePending   BackupJobState = "pending"
)

type BackupState string

const (
	BackupStateRunning   BackupState = "running"
	BackupStateSucceeded BackupState = "succeeded"
	BackupStateFailed    BackupState = "failed"
)

type BackupType string

const BackupTypeAuto BackupType = "auto"

type RestoreJobState string

const (
	RestoreJobSatePending    RestoreJobState = "pending"
	RestoreJobStateSucceeded RestoreJobState = "succeeded"
	RestoreJobStateFailed    RestoreJobState = "failed"
	RestoreJobStateRunning   RestoreJobState = "running"
	RestoreJobStateCanceling RestoreJobState = "canceling"
	RestoreJobStateCanceled  RestoreJobState = "canceled"
)

var BackupCronParse = cron.NewParser(
	cron.Second | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor,
)

type RestoreType string

const (
	RestoreTypeInPlace RestoreType = "inplace"
	RestoreTypeNew     RestoreType = "new"
)

const (
	StarterFreePlanBackupRetention = 24 * time.Hour      // 1 day
	StarterPaidPlanBackupRetention = 14 * 24 * time.Hour // 14 days
	EssentialPlanBackupRetention   = 14 * 24 * time.Hour // 14 days
	MaxBackupRetentionDays         = 30
)

type BackupScheduleCheckJobState string

const (
	BackupScheduleCheckJobStateSucceeded BackupScheduleCheckJobState = "succeeded"
	BackupScheduleCheckJobStateFailed    BackupScheduleCheckJobState = "failed"
	BackupScheduleCheckJobStatePending   BackupScheduleCheckJobState = "pending"
)
