package repo

import (
	"context"

	"github.com/tidbcloud/cluster-service-ng/domain/entity"
)

// TemplateSummary holds a template name and the version string of its default (newest AVAILABLE) entry.
// DefaultVersion is empty string when no AVAILABLE version exists for the template.
type TemplateSummary struct {
	TemplateName   string
	DefaultVersion string
}

type TemplateRegistryRepo interface {
	Upsert(ctx context.Context, item *entity.TemplateRegistry) error
	Load(ctx context.Context, templateName, version string) (*entity.TemplateRegistry, error)
	ListByTemplateName(ctx context.Context, templateName string) ([]*entity.TemplateRegistry, error)
	ListByTemplateNameForUpdate(ctx context.Context, templateName string) ([]*entity.TemplateRegistry, error)
	// ListTemplateSummaries returns all distinct template names with their default
	// (newest AVAILABLE) version in a single query, avoiding the N+1 pattern.
	ListTemplateSummaries(ctx context.Context) ([]*TemplateSummary, error)
	UpdateStatus(ctx context.Context, templateName, version string, status entity.TemplateVersionStatus) error
}
