package domain

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

func TiCDCChangefeedDownStreamType2ConnectorType(t entity.TiCDCChangefeedDownStreamType) dataflow.ConnectorType {
	switch t {
	case entity.TiCDCDownStreamTypeMySQL:
		return dataflow.ConnectorType_MYSQL
	case entity.TiCDCDownStreamTypeKafka:
		return dataflow.ConnectorType_KAFKA
	case entity.TiCDCDownStreamTypePulsar:
		return dataflow.ConnectorType_PULSAR
	case entity.TiCDCDownStreamTypeS3:
		return dataflow.ConnectorType_S3
	case entity.TiCDCDownStreamTypeGCS:
		return dataflow.ConnectorType_GCS
	case entity.TiCDCDownStreamTypeAzureBlobStorage:
		return dataflow.ConnectorType_AZURE_BLOB_STORAGE
	case entity.TiCDCDownStreamTypeServerless:
		return dataflow.ConnectorType_SERVERLESS_TIDB
	default:
		return dataflow.ConnectorType_TOTAL
	}
}

func ConnectorType2TiCDCChangefeedDownStreamType(t dataflow.ConnectorType) entity.TiCDCChangefeedDownStreamType {
	switch t {
	case dataflow.ConnectorType_MYSQL:
		return entity.TiCDCDownStreamTypeMySQL
	case dataflow.ConnectorType_KAFKA:
		return entity.TiCDCDownStreamTypeKafka
	case dataflow.ConnectorType_PULSAR:
		return entity.TiCDCDownStreamTypePulsar
	case dataflow.ConnectorType_S3:
		return entity.TiCDCDownStreamTypeS3
	case dataflow.ConnectorType_GCS:
		return entity.TiCDCDownStreamTypeGCS
	case dataflow.ConnectorType_AZURE_BLOB_STORAGE:
		return entity.TiCDCDownStreamTypeAzureBlobStorage
	case dataflow.ConnectorType_SERVERLESS_TIDB:
		return entity.TiCDCDownStreamTypeServerless
	default:
		return ""
	}
}

func ChangefeedKernelStatus2ConnectorStatus(s entity.ChangefeedKernelStatus) dataflow.Connector_Status {
	switch s {
	case entity.ChangefeedKernelStatusNormal:
		return dataflow.Connector_RUNNING
	case entity.ChangefeedKernelStatusWarning:
		return dataflow.Connector_WARNING
	case entity.ChangefeedKernelStatusError, entity.ChangefeedKernelStatusFailed:
		return dataflow.Connector_ERROR
	case entity.ChangefeedKernelStatusStopped:
		return dataflow.Connector_PAUSED
	default:
		return dataflow.Connector_RUNNING
	}
}

func BizChangefeedOperationStatus2ConnectorStatus(s entity.BizChangefeedOperationStatus) dataflow.Connector_Status {
	switch s {
	case entity.BizChangefeedOperationStatusCreating:
		return dataflow.Connector_CREATING
	case entity.BizChangefeedOperationStatusScaling:
		return dataflow.Connector_SCALING
	case entity.BizChangefeedOperationStatusPaused:
		return dataflow.Connector_PAUSED
	case entity.BizChangefeedOperationStatusFailed:
		return dataflow.Connector_FAILED
	case entity.BizChangefeedOperationStatusDeleting:
		return dataflow.Connector_DELETING
	case entity.BizChangefeedOperationStatusDeleted:
		return dataflow.Connector_DELETED
	default:
		return dataflow.Connector_RUNNING
	}
}
