package domain

import (
	"github.com/tidbcloud/dataflow-service/app/repo/entity"
	"github.com/tidbcloud/dataflow-service/idl/pbgen/proto/dataflow"
)

func RestoreModeDataflow2Domain(mode dataflow.RestoreMode) RestoreMode {
	switch mode {
	case dataflow.RestoreMode_RESTORE_MODE_SNAPSHOT:
		return RestoreModeSnapshot
	case dataflow.RestoreMode_RESTORE_MODE_PITR:
		return RestoreModePITR
	default:
		return ""
	}
}

func RestoreModeDomain2Dataflow(mode RestoreMode) dataflow.RestoreMode {
	switch mode {
	case RestoreModeSnapshot:
		return dataflow.RestoreMode_RESTORE_MODE_SNAPSHOT
	case RestoreModePITR:
		return dataflow.RestoreMode_RESTORE_MODE_PITR
	default:
		return dataflow.RestoreMode_RESTORE_MODE_SNAPSHOT
	}
}

func RestoreModeEntity2Domain(mode entity.RestoreMode) RestoreMode {
	switch mode {
	case entity.RestoreModeSnapshot:
		return RestoreModeSnapshot
	case entity.RestoreModePiTR:
		return RestoreModePITR
	default:
		return ""
	}
}

var restoreStatusDomain2DataflowMap = map[RestoreStatusEnum]dataflow.RestoreStatus{
	RestoreStatusEnumPending:    dataflow.RestoreStatus_RESTORE_STATUS_PENDING,
	RestoreStatusEnumRunning:    dataflow.RestoreStatus_RESTORE_STATUS_RUNNING,
	RestoreStatusEnumFailed:     dataflow.RestoreStatus_RESTORE_STATUS_FAILED,
	RestoreStatusEnumSuccess:    dataflow.RestoreStatus_RESTORE_STATUS_SUCCESS,
	RestoreStatusEnumTerminated: dataflow.RestoreStatus_RESTORE_STATUS_TERMINATED,
}

func RestoreStatusDomain2Dataflow(status RestoreStatusEnum) dataflow.RestoreStatus {
	if v, ok := restoreStatusDomain2DataflowMap[status]; ok {
		return v
	}
	return dataflow.RestoreStatus_RESTORE_STATUS_UNSPECIFIED
}
