package jiraclimanager

import (
	"context"
	"fmt"

	"github.com/tidbcloud/escalation-base/support-autoshift/pkg/infra/config"
	"github.com/tidbcloud/escalation-base/support-autoshift/pkg/infra/jiracli"
)

type Params struct {
	Configs []config.JiraProjectConfig
}

type manager struct {
	jiraClientMap map[string]jiracli.JiraCli
}

func NewJiraCliManager(params Params) (JiraClientManager, error) {
	m := &manager{jiraClientMap: make(map[string]jiracli.JiraCli)}
	for _, projectConfig := range params.Configs {
		cliConf := jiracli.Config{
			Scheme:  "https",
			Addr:    projectConfig.Host,
			Project: projectConfig.ProjectID,
			Token:   projectConfig.Token,
		}
		cli, err := jiracli.NewJiraCli(cliConf)
		if err != nil {
			return m, err
		}
		m.jiraClientMap[projectConfig.ProjectName] = cli
	}
	return m, nil
}

func (m *manager) GetJiraCliWithProjectName(ctx context.Context, projectName string) (jiracli.JiraCli, error) {
	if cli, ok := m.jiraClientMap[projectName]; ok {
		return cli, nil
	} else {
		return nil, fmt.Errorf("jira cli not found for projectName %s", projectName)
	}
}
