package billing

import (
	"github.com/tidbcloud/core-portal/internal/central/db/tenant"
	"github.com/tidbcloud/pkgv2/salesforce"
	"go.uber.org/zap"
)

type Model struct {
	log *zap.Logger
}

type Credit struct {
	ID      uint64
	Amount  int64
	Created int64
}

type SalesforceHandler interface {
	UpdateAccount(account salesforce.Account) error
	SyncLeads(lead salesforce.Lead) error
}

func NewModel(log *zap.Logger) Model {
	return Model{log: log}
}

type Context struct {
	Model
	tenantAndUser *tenant.User
	log           *zap.Logger
}

func (c Context) Log() *zap.Logger {
	return c.log
}

// User returns a UserContext
func (m Model) User(user *tenant.User) Context {
	return Context{m, user, m.log.With(zap.Uint64("tenantID", uint64(user.TenantID)), zap.Uint64("userID", uint64(user.ID)), zap.String("module", "billing"))}
}
