package paymenthandler

import (
	"time"

	"github.com/shopspring/decimal"

	"github.com/pingcap/dbaas/billing2/forms"
)

type PaymentProvider interface {
	GetThirdPartyName() string
	Setup(tenant *forms.Tenant) (userCode string, err error)
	Pay(paymentInfo *forms.PaymentMethod, billingCompany *forms.BillingCompany, invoice *forms.Invoice) (*forms.Invoice, error)
	PayMultiInvoice(paymentInfo *forms.PaymentMethod, billingCompany *forms.BillingCompany, invoices []forms.Invoice) ([]forms.Invoice, error)
	Payable(tenantID uint, userCode string) (bool, error)
	NeedMultiInvoiceSendOnce() bool
	EnableReconciliation() bool
	GetDailyRevenue(date time.Time) ([]*TenantRevenue, error)
	GetMonthlyRevenue(date time.Time) ([]*TenantRevenue, error)
	EnableTaxCalculation() bool
	EnableHourlySending(tenantID, billingConfigID uint) bool
	EnableDailySending(tenantID, billingConfigID uint) (bool, int)
	NeedInMonthInvoice() bool
	NeedSetInvoiceAutoConfirm() bool
}
type PaymentHandler interface {
	GetProvider(provider string) (PaymentProvider, error)
	AllProviders() []string
}

var globalHandler PaymentHandler = nil

func GetPaymentHandler() PaymentHandler {
	return globalHandler
}
func SetPaymentHandler(handler PaymentHandler) {
	globalHandler = handler
}

type TenantRevenue struct {
	PaymentCode string
	Revenue     decimal.Decimal
}
