package com.braintree.facade;

import com.braintree.command.result.BrainTreeFindCustomerResult;
import com.braintree.form.UpdateCreditCardBillingAddressForm;
import com.braintree.hybris.data.BraintreeUserData;
import de.hybris.platform.commercefacades.order.data.CCPaymentInfoData;
import de.hybris.platform.commercefacades.user.UserFacade;
import de.hybris.platform.commercefacades.user.data.AddressData;
import de.hybris.platform.commercefacades.user.data.CustomerData;

import java.util.List;

public interface BrainTreeUserFacade extends UserFacade {

    void removeBTCCPaymentInfo(String paymentMethodToken);

    List<CCPaymentInfoData> getBrainTreeCCPaymentInfos(boolean saved);

    void editPaymentMethod(UpdateCreditCardBillingAddressForm updateCreditCardBillingAddressForm);

    BraintreeUserData getUserData();

    BrainTreeFindCustomerResult findBrainTreeCustomer(String braintreeCustomerId);

    boolean isCurrentUserHasBrainTreeCustomerId();

    CustomerData getCustomerByPayerId(String payerId);

    boolean isPayerIdInCustomer(String uid);

    boolean isCustomerWithPayerIdExist(String payer_id);

    CustomerData getCustomerDataByUid(final String uId);

    AddressData getBillingAddressByPaymentMethodId(String paymentMethodId);

    boolean isLoginDisabledForCurrentEmail(String email);

    boolean isPasswordValid(final String username, final String password);

    void saveAddressForCurrentCustomer(AddressData addressData);

    boolean isDuplicateAddressForCurrentUser(final AddressData addressData);

}
