package hooks

import (
	"context"
	"encoding/json"
	"log/slog"

	"github.com/tidbcloud/jiraport/pkg/api/hooks"
	"github.com/tidbcloud/jiraport/pkg/clients/jira"
	"github.com/tidbcloud/jiraport/pkg/clients/lambda"
)

type HookEventHandler struct {
	logger     *slog.Logger
	jiraClient jira.Interface
}

func New(
	logger *slog.Logger,
	jira jira.Interface,
) (*HookEventHandler, error) {
	return &HookEventHandler{
		logger:     logger,
		jiraClient: jira,
	}, nil
}

func (handler *HookEventHandler) Handle(ctx context.Context, ev lambda.Event) {
	var hookEvent hooks.HookBody
	err := json.Unmarshal(ev.Payload, &hookEvent)
	if err != nil {
		handler.logger.Error("decode hook event failed", "err", err, "payload", ev.Payload)
		return
	}

	handler.logger.Info("receive hook event", "issue ID", hookEvent.JiraIssueID)

	_ = handler.jiraClient.AddComment(hookEvent.JiraIssueID, hookEvent.MarkdownContent)
	handler.logger.Info("handle ack event success", "issue ID", hookEvent.JiraIssueID)
}
