package tests

import (
	"fmt"

	"github.com/pingcap/dbaas/billing2/forms"
	"github.com/pingcap/dbaas/billing2/handler/centralhandler"
	"github.com/pingcap/dbaas/billing2/handler/paymenthandler"
)

type MockPaymentHandlerImpl struct {
}

type MockPaymentProviderImpl struct {
}

func (*MockPaymentProviderImpl) GetUserCode(tenant forms.Tenant) (string, error) {
	return fmt.Sprintf("mock_%d", tenant.TenantID), nil
}

func (*MockPaymentProviderImpl) Pay(userCode string, invoice *forms.Invoice) error {
	return nil
}

func (*MockPaymentProviderImpl) Payable(userCode string) (bool, error) {
	return true, nil
}

func (*MockPaymentHandlerImpl) GetProvider(string) (paymenthandler.PaymentProvider, error) {
	return &MockPaymentProviderImpl{}, nil
}

func MockPaymentHandler() {
	paymenthandler.SetPaymentHandler(&MockPaymentHandlerImpl{})
}

type MockCentralHandlerImpl struct{}

func (*MockCentralHandlerImpl) GetTenant(tenantID uint) (*forms.Tenant, error) {
	return &forms.Tenant{
		TenantID: tenantID,
	}, nil
}

func (*MockCentralHandlerImpl) GetAllTenants() ([]forms.Tenant, error) {
	return []forms.Tenant{}, nil
}

func (*MockCentralHandlerImpl) DownloadFile(string) ([]byte, error) {
	return []byte("mock_file_content"), nil
}

func MockCentralHandler() {
	centralhandler.SetCentralHandler(&MockCentralHandlerImpl{})
}
