package domain

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

func TiCDCChangefeedDownStreamType2ConnectorType(t entity.TiCDCChangefeedDownStreamType) dataflow.ChangefeedType {
	switch t {
	case entity.TiCDCDownStreamTypeMySQL:
		return dataflow.ChangefeedType_MYSQL
	case entity.TiCDCDownStreamTypeKafka:
		return dataflow.ChangefeedType_KAFKA
	case entity.TiCDCDownStreamTypePulsar:
		return dataflow.ChangefeedType_PULSAR
	case entity.TiCDCDownStreamTypeS3:
		return dataflow.ChangefeedType_S3
	case entity.TiCDCDownStreamTypeGCS:
		return dataflow.ChangefeedType_GCS
	case entity.TiCDCDownStreamTypeServerless:
		return dataflow.ChangefeedType_SERVERLESS_TIDB
	default:
		return dataflow.ChangefeedType_TOTAL
	}
}

func ConnectorType2TiCDCChangefeedDownStreamType(t dataflow.ChangefeedType) entity.TiCDCChangefeedDownStreamType {
	switch t {
	case dataflow.ChangefeedType_MYSQL:
		return entity.TiCDCDownStreamTypeMySQL
	case dataflow.ChangefeedType_KAFKA:
		return entity.TiCDCDownStreamTypeKafka
	case dataflow.ChangefeedType_PULSAR:
		return entity.TiCDCDownStreamTypePulsar
	case dataflow.ChangefeedType_S3:
		return entity.TiCDCDownStreamTypeS3
	case dataflow.ChangefeedType_GCS:
		return entity.TiCDCDownStreamTypeGCS
	case dataflow.ChangefeedType_SERVERLESS_TIDB:
		return entity.TiCDCDownStreamTypeServerless
	default:
		return ""
	}
}

func ChangefeedKernelStatus2ConnectorStatus(s entity.ChangefeedKernelStatus) dataflow.Changefeed_Status {
	switch s {
	case entity.ChangefeedKernelStatusNormal:
		return dataflow.Changefeed_RUNNING
	case entity.ChangefeedKernelStatusWarning:
		return dataflow.Changefeed_WARNING
	case entity.ChangefeedKernelStatusError, entity.ChangefeedKernelStatusFailed:
		return dataflow.Changefeed_ERROR
	case entity.ChangefeedKernelStatusStopped:
		return dataflow.Changefeed_PAUSED
	default:
		return dataflow.Changefeed_RUNNING
	}
}

func BizChangefeedOperationStatus2ConnectorStatus(s entity.BizChangefeedOperationStatus) dataflow.Changefeed_Status {
	switch s {
	case entity.BizChangefeedOperationStatusCreating:
		return dataflow.Changefeed_CREATING
	case entity.BizChangefeedOperationStatusScaling:
		return dataflow.Changefeed_SCALING
	case entity.BizChangefeedOperationStatusPaused:
		return dataflow.Changefeed_PAUSED
	case entity.BizChangefeedOperationStatusFailed:
		return dataflow.Changefeed_FAILED
	case entity.BizChangefeedOperationStatusDeleting:
		return dataflow.Changefeed_DELETING
	case entity.BizChangefeedOperationStatusDeleted:
		return dataflow.Changefeed_DELETED
	case entity.BizChangefeedOperationStatusNormal:
		return dataflow.Changefeed_RUNNING
	default:
		return dataflow.Changefeed_RUNNING
	}
}
