package jobs

import (
	"context"

	"github.com/tidbcloud/account/central/jobqueue"
	"github.com/tidbcloud/account/commons/config"
	"github.com/tidbcloud/account/thirdparty/salesforce"
	tpzendesk "github.com/tidbcloud/account/thirdparty/zendesk"
	"github.com/tidbcloud/pkgv2/zendesk"
)

type SalesforceHandler interface {
	UpdateAccount(ctx context.Context, account salesforce.Account) error
	SyncLeads(ctx context.Context, lead salesforce.Lead) error
	SyncPocApplication(ctx context.Context, pocApplication salesforce.PocApplication) error
}

var (
	salesforceClient SalesforceHandler
	zendeskClient    *zendesk.Client
)

func RegisterHandlers() {
	jobqueue.MustRegister(config.JobSyncSalesforce, SyncSalesforce)
	//jobqueue.MustRegister(config.JobSendWelcomeEmail, SendWelcomeEmail)
	jobqueue.MustRegister(config.JobSyncZendesk, SyncZendesk)
	jobqueue.MustRegister(config.JobSyncPocApplication, SyncPocApplication)
	jobqueue.MustRegister(config.JobHeartBeatSignal, HeartBeatSignal)
}

func InitDeps() error {
	var err error

	if config.Global().SalesforceConfig.EnableSalesforce {
		salesforceClient, err = salesforce.NewSalesforceClient(config.Global())
		if err != nil {
			return err
		}
	}

	zendeskClient, err = tpzendesk.NewZendeskClient(config.Global())
	return err
}

func SetSalesforceClient(client SalesforceHandler) {
	salesforceClient = client
}

func SetZendeskClient(client *zendesk.Client) {
	zendeskClient = client
}
