package entity

import (
	"google.golang.org/protobuf/types/known/timestamppb"

	globalngv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1"
	openapingv1beta2 "github.com/tidbcloud/tidb-management-service/api/spec/tidb_cloud_open_api/nextgen/v1beta2"
)

type RestoreCluster struct {
	OrgId                string
	TargetClusterId      string
	SourceClusterId      string
	RestoreMode          openapingv1beta2.RestoreMode
	BackupId             string
	PointInTime          *timestamppb.Timestamp
	ClassicBackupStorage *openapingv1beta2.ClassicBackupStorage
}

func (r *RestoreCluster) GetNextGenRestoreMode() globalngv1.RestoreMode {
	switch r.RestoreMode {
	case openapingv1beta2.RestoreMode_SNAPSHOT:
		return globalngv1.RestoreMode_RESTORE_MODE_SNAPSHOT

	case openapingv1beta2.RestoreMode_PITR:
		return globalngv1.RestoreMode_RESTORE_MODE_PITR
	case openapingv1beta2.RestoreMode_DEDICATED_SNAPSHOT:
		return globalngv1.RestoreMode_RESTORE_MODE_DEDICATED_SNAPSHOT
	case openapingv1beta2.RestoreMode_CLASSIC_SNAPSHOT:
		return globalngv1.RestoreMode_RESTORE_MODE_CLASSIC_SNAPSHOT
	default:
		return globalngv1.RestoreMode_RESTORE_MODE_UNSPECIFIED
	}
}

type RestoreClusterStatus struct {
	*openapingv1beta2.RestoreStatusResponse
}
