package action

import (
	"context"
	"fmt"
	"log/slog"

	"github.com/tidbcloud/jiraport/pkg/clients/jira"
	"github.com/tidbcloud/jiraport/pkg/entity"
)

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

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

func (cmd *TransitionCommand) Exec(ctx context.Context,
	actionExecInfo *entity.NotificationActionExecInfo,
	args ...string,
) (bool, string, error) {
	if len(args) < 1 {
		return false, "no transition state provided", fmt.Errorf("no transition state provided")
	}
	issueKey := actionExecInfo.Notification.Issue.Key
	transitionID := args[0]

	err := cmd.jiraClient.Transition(issueKey, transitionID)
	if err != nil {
		return false, fmt.Sprintf("failed to transition id %s: %s", transitionID, err.Error()), fmt.Errorf("fail to transition issue %s to %s, %w", issueKey, transitionID, err)
	}
	return true, fmt.Sprintf("issue transition id %s", transitionID), nil
}
