package org.onehippo.cms7.hst.hippokart.components;
import com.konakart.app.KKException;
import com.konakart.appif.CustomerRegistrationIf;
import com.konakart.appif.ZoneIf;
import org.apache.commons.lang.StringUtils;
import org.hippoecm.hst.component.support.forms.FormField;
import org.hippoecm.hst.component.support.forms.FormMap;
import org.hippoecm.hst.core.component.HstRequest;
import org.hippoecm.hst.core.component.HstResponse;
import org.onehippo.forge.konakart.hst.components.KKMyAccount;
import org.onehippo.forge.konakart.hst.utils.KKRegisterFormUtils;
import org.onehippo.forge.konakart.site.service.KKServiceHelper;
import java.util.ArrayList;
import java.util.List;
import static org.onehippo.forge.konakart.hst.utils.KKRegisterFormUtils.COUNTRIES;
import static org.onehippo.forge.konakart.hst.utils.KKRegisterFormUtils.COUNTRY;
import static org.onehippo.forge.konakart.hst.utils.KKRegisterFormUtils.PROVINCES;
public class MyAccount extends KKMyAccount {
public static final String CUSTOM_CUSTOMER_1 = "customCustomer1";
public static final String CUSTOM_ADDRESS_1 = "customAddress1";
@Override
protected List<String> getCreateFormMapFields() {
List<String> formMapFields = KKRegisterFormUtils.PARAMS;
formMapFields.add(CUSTOM_CUSTOMER_1);
formMapFields.add(CUSTOM_ADDRESS_1);
return formMapFields;
}
@Override
protected void doBeforeRenderNotLoginAction(HstRequest request, HstResponse response, FormMap formMap) {
if (isGuestCustomer(request)) {
response.setRenderPath("jsp/myaccount/main/login.jsp");
}
}
@Override
protected void deBeforeRenderRegisterAction(HstRequest request, HstResponse response, FormMap formMap) {
try {
request.setAttribute(COUNTRIES, KKServiceHelper.getKKEngineService().getKKAppEng(request).getAllCountries());
// Set the province if has been selected
FormField countryField = formMap.getField(COUNTRY);
if (countryField != null) {
int country = StringUtils.isNotBlank(countryField.getValue()) ? Integer.valueOf(countryField.getValue()) : -1;
ZoneIf[] zones = KKServiceHelper.getKKEngineService().getKKAppEng(request).getEng().getZonesPerCountry(country);
List<String> stateProvinces = new ArrayList<String>();
for (ZoneIf zone : zones) {
stateProvinces.add(zone.getZoneName());
}
request.setAttribute(PROVINCES, stateProvinces);
}
} catch (KKException e) {
log.error("Failed to retrieve the list of provinces - {} ", e.toString());
}
response.setRenderPath("jsp/myaccount/main/register.jsp");
}
@Override
protected void doBeforeRenderCreateAction(HstRequest request, HstResponse response, FormMap formMap) {
}
@Override
protected void doCallBeforeRegisterCustomer(HstRequest request, CustomerRegistrationIf customerRegistration, FormMap formMap) {
FormField formField = formMap.getField(CUSTOM_CUSTOMER_1);
if ((formField != null) && StringUtils.isNotBlank(formField.getValue())) {
customerRegistration.setCustomerCustom1(formField.getValue());
}
formField = formMap.getField(CUSTOM_ADDRESS_1);
if ((formField != null) && StringUtils.isNotBlank(formField.getValue())) {
customerRegistration.setAddressCustom1(formField.getValue());
}
}
@Override
protected void doCallAfterRegisterCustomer(HstRequest request, HstResponse response, int customerId, FormMap formap) {
}
@Override
protected void doCallAfterLoginAction(HstRequest request, HstResponse response) {
}
}