package regionalservice

import (
	"context"
	"sync"

	"github.com/tidbcloud/observability/pkg/common/constants"
	"github.com/tidbcloud/observability/pkg/common/message"
	"github.com/tidbcloud/observability/pkg/resourcemanager"
)

type TemplateHandler struct {
}

var templateHandler *TemplateHandler

var templateOnce sync.Once

func GetTemplateHandler() *TemplateHandler {
	templateOnce.Do(func() {
		if templateHandler == nil {
			templateHandler = new(TemplateHandler)
		}
	})

	return templateHandler
}

func (p *TemplateHandler) ListRuleTemplates(ctx context.Context) (resp message.OpenAlertRuleTemplateList, err error) {
	rules, err := resourcemanager.GetPrometheusRulesReaderWriter(ctx, true).ListPrometheusRulesInNs(ctx, constants.RuleTemplateNamespace)
	if err != nil {
		return resp, err
	}
	for _, rule := range rules {
		resp.Templates = append(resp.Templates, message.OpenAlertRuleTemplate{
			ID:   rule.Name,
			Desc: "",
		})
	}
	return
}

func (p *TemplateHandler) GetRuleTemplate(ctx context.Context, clusterID string) (resp message.OpenAlertRule, err error) {
	rule, err := resourcemanager.GetPrometheusRulesReaderWriter(ctx, true).GetPrometheusRule(ctx, clusterID)
	if err != nil {
		return resp, err
	}
	resp.PrometheusRuleSpec = rule.Spec
	return
}
