package tenantctx

import (
	"context"

	"github.com/tidbcloud/account/thirdparty/salesforce"
	"github.com/tidbcloud/pkgv2/zendesk"
	"gopkg.in/auth0.v4/management"
)

type Auth0UserManagementHandler interface {
	Create(user *management.User) error
	Delete(id string) error
	ListByEmail(email string, opts ...management.ListOption) ([]*management.User, error)
	Update(id string, u *management.User) error
}

type ZendeskHandler interface {
	CreateOrUpdateOrganization(zendesk.Organization) (zendesk.Organization, error)
	CreateOrganization(zendesk.Organization) (zendesk.Organization, error)
}

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
	SyncPOCCredits(ctx context.Context, pocCredits salesforce.POCCredits) error
}

type Auth0TokenHandler interface {
	GetEmailFromAuth0Token(auth0Token string) (string, error)
	GetSubFromAuth0Token(auth0Token string) (string, error)
}
