package impl

import (
	"errors"
	"fmt"
	"github.com/pingcap/dbaas/billing2/constant"
	"github.com/pingcap/dbaas/billing2/forms"
	"github.com/pingcap/dbaas/billing2/handler/centralhandler"
	"github.com/pingcap/dbaas/billing2/utils/log"
	"github.com/tidbcloud/account/idl/pbgen/proto/account"
	"go.uber.org/zap"
)

type ResaleHandlerImpl struct {
	MspHandlerImpl
}

func (*ResaleHandlerImpl) Setup(tenant *forms.Tenant) (string, error) {
	if tenant.ThirdPartyAccountProvider == constant.MSPAccountProvider { // for directly created customer
		return tenant.ThirdPartyAccountCode, nil
	}
	scheduleInfo, err := centralhandler.GetCentralHandler().GetPendingCustomerScheduleInfo(tenant.TenantID, account.PartnerType_PARTNER_TYPE_RESALE) // for the switched by schedule customers
	if err != nil {
		return "", err
	}
	if len(scheduleInfo) == 1 {
		return fmt.Sprint(scheduleInfo[0].PartnerTenantID), nil
	}
	log.Error("fail to get resale scheduling", zap.Any("scheduleInfo", scheduleInfo), zap.Uint("TenantID", tenant.TenantID))
	return "", errors.New("invalid customer status")
}
