@VisibleForTesting
int calculateBcdForAlignment(final BillingAlignment alignment, final SubscriptionBaseBundle bundle, final SubscriptionBase subscription,
final Account account, final Catalog catalog, final Plan plan, final InternalCallContext context) throws AccountApiException, SubscriptionBaseApiException, CatalogApiException {
int result = 0;
switch (alignment) {
case ACCOUNT:
result = account.getBillCycleDayLocal();
if (result == 0) {
result = calculateBcdFromSubscription(subscription, plan, account, catalog, context);
}
break;
case BUNDLE:
final SubscriptionBase baseSub = subscriptionApi.getBaseSubscription(bundle.getId(), context);
Plan basePlan = baseSub.getCurrentPlan();
if (basePlan == null) {
basePlan = baseSub.getLastActivePlan();
}
result = calculateBcdFromSubscription(baseSub, basePlan, account, catalog, context);
break;
case SUBSCRIPTION:
result = calculateBcdFromSubscription(subscription, plan, account, catalog, context);
break;
}
if (result == 0) {
throw new CatalogApiException(ErrorCode.CAT_INVALID_BILLING_ALIGNMENT, alignment.toString());
}
return result;
}