package template_registry

import (
	"time"

	apiv1 "github.com/tidbcloud/cluster-service-ng/api/cluster-service-ng/v1beta"
	"github.com/tidbcloud/cluster-service-ng/domain/entity"
	"github.com/tidbcloud/cluster-service-ng/pkg/storage/mysql/schema"
)

func cvtSchemaToEntity(s *schema.TemplateRegistry) *entity.TemplateRegistry {
	return &entity.TemplateRegistry{
		TemplateVersionInfo: entity.TemplateVersionInfo{
			TemplateName: s.TemplateName,
			Version:      s.Version,
			CreatedAt:    s.CreatedAt.Format(time.RFC3339),
			Status:       statusToProto(s.Status),
		},
		Content: s.Content,
	}
}

func cvtEntityToSchema(e *entity.TemplateRegistry) *schema.TemplateRegistry {
	return &schema.TemplateRegistry{
		TemplateName: e.GetTemplateName(),
		Version:      e.GetVersion(),
		Content:      e.Content,
		Status:       statusToStore(e.GetStatus()),
	}
}

func statusToProto(s string) entity.TemplateVersionStatus {
	switch s {
	case schema.TemplateVersionStatusAvailable:
		return apiv1.TemplateVersionStatus_TEMPLATE_VERSION_STATUS_AVAILABLE
	case schema.TemplateVersionStatusDisabled:
		return apiv1.TemplateVersionStatus_TEMPLATE_VERSION_STATUS_DISABLED
	case schema.TemplateVersionStatusExpired:
		return apiv1.TemplateVersionStatus_TEMPLATE_VERSION_STATUS_EXPIRED
	default:
		return apiv1.TemplateVersionStatus_TEMPLATE_VERSION_STATUS_UNSPECIFIED
	}
}

func statusToStore(s entity.TemplateVersionStatus) string {
	switch s {
	case apiv1.TemplateVersionStatus_TEMPLATE_VERSION_STATUS_AVAILABLE:
		return schema.TemplateVersionStatusAvailable
	case apiv1.TemplateVersionStatus_TEMPLATE_VERSION_STATUS_DISABLED:
		return schema.TemplateVersionStatusDisabled
	case apiv1.TemplateVersionStatus_TEMPLATE_VERSION_STATUS_EXPIRED:
		return schema.TemplateVersionStatusExpired
	default:
		return ""
	}
}
