package cz.moneta.test.dsl.auto.smartauto;

import cz.moneta.test.dsl.auto.smartauto.shared.*;
import cz.moneta.test.harness.context.StoreAccessor;
import cz.moneta.test.harness.support.web.*;

public interface CustomerPage extends SmartAutoFlow<CustomerPage>, StoreAccessor {

    String NAME = "//input[@name='person.nonBusinessman.contact.contactFirstName']";
    String PHONE_NUMBER = "//input[@name='person.nonBusinessman.contact.contactPhoneNumberCzk']";
    String EMAIL = "//input[@name='person.nonBusinessman.contact.contactEmail']";
    String ADDRESS = "(//input[contains(@placeholder, 'RUIAN')])[1]";
    String NATIONALITY = "//input[@value='Česká republika']";
    String NATIONALITY_CHOOSE = "//button[contains(text(), '%s')]";
    String PIN = "//input[@name='person.nonBusinessman.identification.pin']";
    String BIRTHDATE = "//input[@value='%s']";
    String BIRTHPLACE = "//input[@name='person.nonBusinessman.identification.birthPlace']";
    String IDENTIFICATION_ID_NUMBER = "//input[@name='person.nonBusinessman.identification.idNumber']";
    String IDENTIFICATION_ID_VALIDITY = "(//span[contains(text(), 'Platnost dokladu')])/..//following-sibling::div/input";
    String FIRST_IDENTIFICATION_TYPE = "(//span[contains(text(), 'Typ dokladu')])/../../following-sibling::div";
    String FIRST_IDENTIFICATION_TYPE_CHOOSE = "//button[contains(text(), '%s')]";
    String FIRST_IDENTIFICATION_ISSUER = "//span[contains(.,'Doklad vydal')]/../following-sibling::div/div/div/input";
    String FIRST_IDENTIFICATION_ISSUER_CHOOSE = "//span[contains(.,'Doklad vydal')]/../following-sibling::div/div[2]/button[1]";
    String SECOND_IDENTIFICATION_TYPE = "(//span[contains(text(), 'Typ druhého dokladu')])/../../following-sibling::div";
    String SECOND_IDENTIFICATION_TYPE_CHOOSE = "//button[contains(text(), '%s')]";
    String SECOND_IDENTIFICATION_ID_NUMBER = "//input[@name='person.nonBusinessman.identification.otherIdNumber']";
    String SECOND_IDENTIFICATION_ID_VALIDITY = "(//span[contains(text(), 'Platnost druhého dokladu')])/..//following-sibling::div/input";
    String ACCOUNT_NUMBER = "//input[@name='person.nonBusinessman.bankContact.accountNumber']";
    String BANK_CODE = "(//span[contains(text(), 'Kód banky')])/../..//following-sibling::div//input";
    String BANK_CODE_CHOOSE = "//button[contains(text(), '%s')]";
    String MARITAL_STATUS = "(//span[contains(text(), 'Rodinný stav')])/../..//following-sibling::div//input";
    String MARITAL_STATUS_CHOOSE = "//button[contains(text(), '%s')]";
    String DEPENDENT_NUMBER = "//input[@name='person.nonBusinessman.personalData.dependentNumber']";
    String HOUSING_KIND = "(//span[contains(text(), 'Způsob bydlení')])/../..//following-sibling::div//input";
    String HOUSING_KIND_CHOOSE = "//button[contains(text(), '%s')]";
    String EDUCATION = "(//span[contains(text(), 'Vzdělání')])/../..//following-sibling::div//input";
    String EDUCATION_CHOOSE = "//button[contains(text(), '%s')]";
    String EMPLOYMENT = "(//span[contains(text(), 'Zaměstnání')])/../..//following-sibling::div//input";
    String EMPLOYMENT_CHOOSE = "//button[contains(text(), '%s')]";
    String EMPLOYMENT_START_DATE = "(//span[contains(text(), 'Datum nástupu')])/..//following-sibling::div/input";
    String EMPLOYMENT_END_DATE = "(//span[contains(text(), 'Datum ukončení')])/..//following-sibling::div/input";
    String EMPLOYMENT_END_PERIOD_DATE = "(//span[contains(text(), 'Datum ukončení doby')])/..//following-sibling::div/input";
    String EMPLOYMENT_NOTICE_PERIOD = "(//span[contains(text(), 'Klient ve výpovědní lhůtě')])/../../../preceding-sibling::span/..";
    String OCCUPATION = "//input[@name='person.nonBusinessman.employment.occupation']";
    String NET_INCOME = "//input[@name='person.nonBusinessman.revenuesAndExpenses.netIncome']";
    String NET_MONTHLY_HOUSEHOLD_INCOME = "//input[@name='person.nonBusinessman.revenuesAndExpenses.netMonthlyHouseholdIncome']";
    String MONTHLY_PAYMENTS = "//input[@name='person.nonBusinessman.revenuesAndExpenses.monthlyPayments']";
    String OTHER_MONTHLY_CHARGES = "//input[@name='person.nonBusinessman.revenuesAndExpenses.otherMonthlyCharges']";
    String COMPANY = "//input[@placeholder='Vyhledávání firmy v ARES']";
    String SEARCH_IN_ARES = "//span[contains(text(), 'Vyhledat v ARES')]";
    String COMPANY_CHOOSE = "//p[contains(text(), '%s')]";
    String COMPANY_ARES_VERIFICATION = "(//span[contains(text(), 'Ověřeno v ARES')])[1]";
    String COMPANY_PHONE_NUMBER = "//input[@name='person.nonBusinessman.employer.contactPhoneNumberCzk']";
    String COMPANY_OTHER_PHONE_NUMBER = "//input[@name='person.nonBusinessman.employer.contactPhoneNumberOther']";
    String COMPANY_EMAIL = "//input[@name='person.nonBusinessman.employer.contactEmail']";
    String COMPANY_NOT_REGISTERED = "//input[@name='person.nonBusinessman.employer.foreignEmployer']//..";
    String COMPANY_NAME = "//input[@name='person.nonBusinessman.employer.company.companyName']";
    String COMPANY_STREET = "//input[@name='person.nonBusinessman.employer.company.companyAddress.street']";
    String COMPANY_RESIDENCE_NUMBER = "//input[@name='person.nonBusinessman.employer.company.companyAddress.residenceNumber']";
    String COMPANY_ORIENTATION_NUMBER = "//input[@name='person.nonBusinessman.employer.company.companyAddress.orientationNumber']";
    String COMPANY_ZIP_CODE = "//input[@name='person.nonBusinessman.employer.company.companyAddress.zipCode']";
    String COMPANY_CITY = "//input[@name='person.nonBusinessman.employer.company.companyAddress.city']";
    String COMPANY_COUNTRY = "(//span[(text()='Země')])/../..//following-sibling::div//input";
    String COMPANY_COUNTRY_CHOOSE = "//button[contains(text(), '%s')]";
    String STAY_TYPE = "(//span[contains(text(), 'Typ pobytů')])/../..//following-sibling::div//input";
    String STAY_TYPE_CHOOSE = "//button[contains(text(), '%s')]";
    String VEHICLE_PAGE = "//span[contains(text(), 'Předmět')]"; // page transition
    String OTHERS_PAGE = "//span[contains(text(), 'Ostatní')]"; // page transition
    String BUSINESSMAN_PHONE_NUMBER = "//input[@name='person.businessman.businessmanInformation.contactPhoneNumberCzk']";
    String BUSINESSMAN_OTHER_PHONE_NUMBER = "//input[@name='person.businessman.businessmanInformation.contactPhoneNumberOther']";
    String BUSINESSMAN_EMAIL = "//input[@name='person.businessman.businessmanInformation.contactEmail']";
    String BUSINESSMAN_SILENT_COMPANION = "//input[@name='person.businessman.businessmanInformation.silentCompanion']/..";
    String FIRST_REPRESENTATIVE_COMPANY_ROLE = "(//span[contains(text(), 'Role ve firmě')])/../..//following-sibling::div//input";
    String FIRST_REPRESENTATIVE_COMPANY_ROLE_CHOOSE = "//button[contains(text(), '%s')]";
    String FIRST_REPRESENTATIVE_NAME = "//input[@name='person.businessman.representatives[0].firstName']";
    String FIRST_REPRESENTATIVE_SURENAME = "//input[@name='person.businessman.representatives[0].surname']";
    String FIRST_REPRESENTATIVE_TITLE_BEFORE = "//input[@name='person.businessman.representatives[0].titleBefore']";
    String FIRST_REPRESENTATIVE_TITLE_AFTER = "//input[@name='person.businessman.representatives[0].titleAfter']";
    String FIRST_REPRESENTATIVE_NATIONALITY = "(//span[contains(text(), 'Občanství')])/../..//following-sibling::div//input";
    String FIRST_REPRESENTATIVE_NATIONALITY_CHOOSE = "//button[contains(text(), '%s')]";
    String FIRST_REPRESENTATIVE_COUNTRY = "(//span[contains(text(), 'Země narození')])/../..//following-sibling::div//input";
    String FIRST_REPRESENTATIVE_COUNTRY_CHOOSE = "//button[contains(text(), '%s')]";
    String FIRST_REPRESENTATIVE_STAY_TYPE = "(//span[contains(text(), 'Typ pobytů')])/../..//following-sibling::div//input";
    String FIRST_REPRESENTATIVE_STAY_TYPE_CHOOSE = "//button[contains(text(), '%s')]";
    String FIRST_REPRESENTATIVE_PIN = "//input[@name='person.businessman.representatives[0].pin']";
    String FIRST_REPRESENTATIVE_BIRTHDATE = "//input[@value='%s']";
    String FIRST_REPRESENTATIVE_BIRTHPLACE = "//input[@name='person.businessman.representatives[0].birthPlace']";
    String FIRST_REPRESENTATIVE_IDENTIFICATION_TYPE = "(//span[contains(text(), 'Typ dokladu')])/../../following-sibling::div";
    String FIRST_REPRESENTATIVE_IDENTIFICATION_TYPE_CHOOSE = "//button[contains(text(), '%s')]";
    String FIRST_REPRESENTATIVE_IDENTIFICATION_ID_NUMBER = "//input[@name='person.businessman.representatives[0].identityNumber']";
    String FIRST_REPRESENTATIVE_IDENTIFICATION_ID_VALIDITY = "(//span[contains(text(), 'Platnost dokladu')])/..//following-sibling::div/input";
    String FIRST_REPRESENTATIVE_PHONE_NUMBER = "//input[@name='person.businessman.representatives[0].contactPhoneNumberCzk']";
    String FIRST_REPRESENTATIVE_OTHER_PHONE_NUMBER = "//input[@name='person.businessman.representatives[0].contactPhoneNumberOther']";
    String FIRST_REPRESENTATIVE_CONTACT_ADDRESS = "(//span[contains(.,'Kontaktní adresa')]/../../label/following-sibling::div/div/div/input)[2]";
    String FIRST_REPRESENTATIVE_CONTACT_ADDRESS_CHOOSE = "(//span[contains(.,'Kontaktní adresa')]/../../label/following-sibling::div/div)[3]/button[1]";
    String FIRST_REPRESENTATIVE_PERMANENT_ADDRESS = "//span[contains(.,'Trvalé bydliště')]/../../label/following-sibling::div/div/div/input";
    String FIRST_REPRESENTATIVE_PERMANENT_ADDRESS_CHOOSE = "//span[contains(.,'Trvalé bydliště')]/../../label/following-sibling::div/div/following-sibling::div/button[1]";
    String FIRST_REPRESENTATIVE_EMAIL_ADDRESS = "//input[@name='person.businessman.representatives[0].email']";
    String BUSINESSMAN_ACCOUNT_NUMBER = "//input[@name='person.businessman.businessmanInformation.bankContact.accountNumber']";
    String BUSINESSMAN_BANK_CODE = "(//span[contains(text(), 'Kód banky')])/../..//following-sibling::div//input";
    String BUSINESSMAN_BANK_CODE_CHOOSE = "//button[contains(text(), '%s')]";
    String BUSINESSMAN_TAX_RECORDS = "(//span[contains(text(), 'Daňová evidence')])/..";
    String BUSINESSMAN_DOUBLE_ENTRY = "(//span[contains(text(), 'Podvojné účetnictví')])/..";
    String BUSINESSMAN_TAX_RECORDS_OWN_ASSETS = "//input[@name='person.businessman.financialInformation.ownAssets']";
    String BUSINESSMAN_TAX_RECORDS_INCOME_COMMITMENT_SUM = "//input[@name='person.businessman.financialInformation.commitmentSum']";
    String BUSINESSMAN_TAX_RECORDS_INCOME_COMMITMENT_DIFFERENCE = "//input[@name='person.businessman.financialInformation.incomeCommitmentDifference']";
    String BUSINESSMAN_TAX_RECORDS_SHORT_TERM_RECEIVABLES = "//input[@name='person.businessman.financialInformation.shortTermReceivables']";
    String BUSINESSMAN_TAX_RECORDS_INCOME_TOTAL = "//input[@name='person.businessman.financialInformation.incomeTotal']";
    String BUSINESSMAN_DOUBLE_ENTRY_EQUITY = "//input[@name='person.businessman.financialInformation.equity']";
    String BUSINESSMAN_DOUBLE_ENTRY_FOREIGN_SOURCES = "//input[@name='person.businessman.financialInformation.foreignSources']";
    String BUSINESSMAN_DOUBLE_ENTRY_PROFIT_BEFORE_TAX = "//input[@name='person.businessman.financialInformation.profitBeforeTax']";
    String BUSINESSMAN_DOUBLE_ENTRY_SHORT_TIME_RECEIVABLES = "//input[@name='person.businessman.financialInformation.shortTermReceivables']";
    String BUSINESSMAN_DOUBLE_ENTRY_INCOME_TOTAL = "//input[@name='person.businessman.financialInformation.incomeTotal']";
    String ADD_REPRESENTATIVE = "//span[contains(text(), 'Přidat zástupce')]/..";
    String SECOND_REPRESENTATIVE_COMPANY_ROLE = "((//span[contains(text(), 'Role ve firmě')])/../..//following-sibling::div//input)[2]";
    String SECOND_REPRESENTATIVE_COMPANY_ROLE_CHOOSE = "//button[contains(text(), '%s')]";
    String SECOND_REPRESENTATIVE_NAME = "//input[@name='person.businessman.representatives[1].firstName']";
    String SECOND_REPRESENTATIVE_SURENAME = "//input[@name='person.businessman.representatives[1].surname']";
    String SECOND_REPRESENTATIVE_TITLE_BEFORE = "//input[@name='person.businessman.representatives[1].titleBefore']";
    String SECOND_REPRESENTATIVE_TITLE_AFTER = "//input[@name='person.businessman.representatives[1].titleAfter']";
    String SECOND_REPRESENTATIVE_NATIONALITY = "((//span[contains(text(), 'Občanství')])/../..//following-sibling::div//input)[2]";
    String SECOND_REPRESENTATIVE_NATIONALITY_CHOOSE = "//button[contains(text(), '%s')]";
    String SECOND_REPRESENTATIVE_COUNTRY = "((//span[contains(text(), 'Země narození')])/../..//following-sibling::div//input)[2]";
    String SECOND_REPRESENTATIVE_COUNTRY_CHOOSE = "//button[contains(text(), '%s')]";
    String SECOND_REPRESENTATIVE_PIN = "//input[@name='person.businessman.representatives[1].pin']";
    String SECOND_REPRESENTATIVE_BIRTHDATE = "//input[@value='%s']";
    String SECOND_REPRESENTATIVE_BIRTHPLACE = "//input[@name='person.businessman.representatives[1].birthPlace']";
    String SECOND_REPRESENTATIVE_IDENTIFICATION_TYPE = "((//span[contains(text(), 'Typ dokladu')])/../../following-sibling::div)[2]";
    String SECOND_REPRESENTATIVE_IDENTIFICATION_TYPE_CHOOSE = "//button[contains(text(), '%s')]";
    String SECOND_REPRESENTATIVE_IDENTIFICATION_ID_NUMBER = "//input[@name='person.businessman.representatives[1].identityNumber']";
    String SECOND_REPRESENTATIVE_IDENTIFICATION_ID_VALIDITY = "((//span[contains(text(), 'Platnost dokladu')])/..//following-sibling::div/input)[2]";
    String SECOND_REPRESENTATIVE_PHONE_NUMBER = "//input[@name='person.businessman.representatives[1].contactPhoneNumberCzk']";
    String SECOND_REPRESENTATIVE_OTHER_PHONE_NUMBER = "//input[@name='person.businessman.representatives[1].contactPhoneNumberOther']";
    String SECOND_REPRESENTATIVE_CONTACT_ADDRESS = "(//input[contains(@placeholder, 'RUIAN')])[2]";
    String SECOND_REPRESENTATIVE_CONTACT_ADDRESS_CHOOSE = "//button//p[contains(text(), '%s')]";
    String SECOND_REPRESENTATIVE_CONTACT_ADDRESS_RUIAN_VERIFICATION = "(//span[contains(text(), 'Ověřeno v RUIAN')])[3]";
    String SECOND_REPRESENTATIVE_EMAIL_ADDRESS = "//input[@name='person.businessman.representatives[1].email']";
    String INCOME_SOURCE = "//span[contains(.,'Zdroj původu peněz - První platba')]/../following-sibling::div/div/div/input";
    String INCOME_SOURCE_CHOOSE = "//span[contains(.,'Zdroj původu peněz - První platba')]/../following-sibling::div/div/button[1]";
    String COMPANY_CREATION_DATE = "//span[text() = 'Datum založení']/..//following-sibling::div/input";
    String REGISTRY_TYPE = "//span[text() = 'Obchodní rejstřík']/../..//following-sibling::div/div/div/input";
    String REGISTRY_TYPE_FIELD = "//span[text() = 'Obchodní rejstřík']/../..//following-sibling::div/div/button[1]";
    String NUMBER_OF_EMPLOYEES = "//span[text() = 'Počet zaměstnanců']/../..//following-sibling::div/div/div/input";
    String NUMBER_OF_EMPLOYEES_FIELD = "//span[text() = 'Počet zaměstnanců']/../..//following-sibling::div/div/button[1]";

    @Click(FIRST_IDENTIFICATION_ISSUER)
    CustomerPage clickFirstIdentificationIssuer();

    @Click(FIRST_IDENTIFICATION_ISSUER_CHOOSE)
    CustomerPage chooseFirstIdentificationIssuer();

    @TypeInto(NAME)
    CustomerPage typeName(String name);

    @TypeInto(PHONE_NUMBER)
    CustomerPage typePhoneNumber(String phoneNumber);

    @TypeInto(EMAIL)
    CustomerPage typeEmail(String email);

    @Click(NATIONALITY)
    CustomerPage clickNationality(Nationality nationality);

    @Click(NATIONALITY_CHOOSE)
    CustomerPage chooseNationality(Nationality nationality);

    @TypeInto(PIN)
    CustomerPage typePin(String pin);

    @KeyPress(Key.TAB)
    CustomerPage lostFocus();

    @CheckElementPresent(BIRTHDATE)
    CustomerPage checkBirthdate(Birthdate birthdate);

    @TypeInto(BIRTHPLACE)
    CustomerPage typeBirthplace(String birthplace);

    @TypeInto(IDENTIFICATION_ID_NUMBER)
    CustomerPage typeIdentificationIdNumber(String identificationIdNumber);

    @TypeInto(IDENTIFICATION_ID_VALIDITY)
    CustomerPage typeIdentificationIdValidity(String identificationIdValidity);

    @Click(FIRST_IDENTIFICATION_TYPE)
    CustomerPage clickFirstIdentificationType();

    @Click(FIRST_IDENTIFICATION_TYPE_CHOOSE)
    CustomerPage chooseFirstIdentificationType(IdentificationType identificationType);

    @Click(SECOND_IDENTIFICATION_TYPE)
    CustomerPage clickSecondIdentificationType();

    @Click(SECOND_IDENTIFICATION_TYPE_CHOOSE)
    CustomerPage chooseSecondIdentificationType(IdentificationType identificationType);

    @TypeInto(SECOND_IDENTIFICATION_ID_NUMBER)
    CustomerPage typeSecondIdentificationIdNumber(String identificationIdNumber);

    @TypeInto(SECOND_IDENTIFICATION_ID_VALIDITY)
    CustomerPage typeSecondIdentificationIdValidity(String identificationIdValidity);

    @TypeInto(ACCOUNT_NUMBER)
    CustomerPage typeAccountNumber(String accountNumber);

    @Click(BANK_CODE)
    CustomerPage clickBankCode();

    @Click(BANK_CODE_CHOOSE)
    CustomerPage chooseBankCode(BankCode bankCode);

    @Click(value = MARITAL_STATUS, jsClick = true)
    CustomerPage clickMaritalStatus();

    @Click(value = MARITAL_STATUS_CHOOSE, jsClick = true)
    CustomerPage chooseMaritalStatus(MaritalStatus maritalStatus);

    @TypeInto(DEPENDENT_NUMBER)
    CustomerPage typeDependentNumber(int dependentNumber);

    @Click(value = HOUSING_KIND, jsClick = true)
    CustomerPage clickHousingKind();

    @Click(value = HOUSING_KIND_CHOOSE, jsClick = true)
    CustomerPage chooseHousingKind(HousingKind housingKind);

    @Click(value = EDUCATION, jsClick = true)
    CustomerPage clickEducation();

    @Click(value = EDUCATION_CHOOSE, jsClick = true)
    CustomerPage chooseEducation(Education education);

    @Click(value = EMPLOYMENT, jsClick = true)
    CustomerPage clickEmployment();

    @Click(value = EMPLOYMENT_CHOOSE, jsClick = true)
    CustomerPage chooseEmployment(Employment employment);

    @TypeInto(EMPLOYMENT_START_DATE)
    CustomerPage typeEmploymentStartDate(String startDate);

    @TypeInto(EMPLOYMENT_END_DATE)
    CustomerPage typeEmploymentEndDate(String endDate);

    @TypeInto(EMPLOYMENT_END_PERIOD_DATE)
    CustomerPage typeEmploymentEndPeriodDate(String endPeriodDate);

    @Click(EMPLOYMENT_NOTICE_PERIOD)
    CustomerPage clickClientInNoticePeriod();

    @TypeInto(OCCUPATION)
    CustomerPage typeOccupation(String occupation);

    @TypeInto(NET_INCOME)
    CustomerPage typeNetIncome(int netIncome);

    @TypeInto(NET_MONTHLY_HOUSEHOLD_INCOME)
    CustomerPage typeNetMonthlyHouseholdIncome(int netMonthlyHouseholdIncome);

    @Click(INCOME_SOURCE)
    CustomerPage clickIncomeSource();

    @Click(INCOME_SOURCE_CHOOSE)
    CustomerPage chooseIncomeSource();

    @TypeInto(MONTHLY_PAYMENTS)
    CustomerPage typeMonthlyPayments(int monthlyPayments);

    @TypeInto(OTHER_MONTHLY_CHARGES)
    CustomerPage typeOtherMonthlyCharges(int otherMonthlyCharges);

    @TypeInto(COMPANY)
    CustomerPage typeCompany(Company company);

    @Click(value = SEARCH_IN_ARES, jsClick = true)
    CustomerPage clickSearchInAres();

    @Wait(value = COMPANY_CHOOSE, waitSecondsForElement = 60)
    @Click(value = COMPANY_CHOOSE, andWait = @Wait(value = COMPANY_ARES_VERIFICATION, waitSecondsForElement = 90))
    CustomerPage chooseCompany(Company company);

    @TypeInto(ADDRESS)
    CustomerPage typeCompanyContactAddress(String companyContactAddress);

    @TypeInto(COMPANY_PHONE_NUMBER)
    CustomerPage typeCompanyPhoneNumber(String companyPhoneNumber);

    @TypeInto(COMPANY_OTHER_PHONE_NUMBER)
    CustomerPage typeCompanyOtherPhoneNumber(String ompanyOtherPhoneNumber);

    @TypeInto(COMPANY_EMAIL)
    CustomerPage typeCompanyEmail(String companyEmail);

    @Wait(value = VEHICLE_PAGE, waitSecondsForElement = 30)
    @Click(value = VEHICLE_PAGE, jsClick = true)
    VehiclePage clickVehiclePage();

    @Click(value = OTHERS_PAGE, jsClick = true)
    OthersPage clickOthersPage();

    @Click(COMPANY_NOT_REGISTERED)
    CustomerPage clickCompanyNotRegistered();

    @TypeInto(COMPANY_NAME)
    CustomerPage typeCompanyName(String companyName);

    @TypeInto(COMPANY_STREET)
    CustomerPage typeCompanyStree(String companyStree);

    @TypeInto(COMPANY_RESIDENCE_NUMBER)
    CustomerPage typeCompanyResidenceNumber(int companyResidenceNumber);

    @TypeInto(COMPANY_ORIENTATION_NUMBER)
    CustomerPage typeCompanyOrientationNumber(int companyOrientationNumber);

    @TypeInto(COMPANY_ZIP_CODE)
    CustomerPage typeCompanyZipCode(int companyZipCode);

    @TypeInto(COMPANY_CITY)
    CustomerPage typeCompanyCity(String companyCity);

    @Click(value = COMPANY_COUNTRY, jsClick = true)
    CustomerPage clickCompanyCountry();

    @Click(value = COMPANY_COUNTRY_CHOOSE, jsClick = true)
    CustomerPage chooseCompanyCountry(Nationality nationality);

    @Click(value = STAY_TYPE, jsClick = true)
    CustomerPage clickStayType();

    @Click(value = STAY_TYPE_CHOOSE, jsClick = true)
    CustomerPage chooseStayType(StayType stayType);

    @TypeInto(BUSINESSMAN_PHONE_NUMBER)
    CustomerPage typeBusinessmanPhoneNumber(String phoneNumber);

    @TypeInto(BUSINESSMAN_OTHER_PHONE_NUMBER)
    CustomerPage typeBusinessmanOtherPhoneNumber(String phoneNumber);

    @TypeInto(BUSINESSMAN_EMAIL)
    CustomerPage typeBusinessmanEmail(String email);

    @TypeInto(COMPANY_CREATION_DATE)
    CustomerPage fillCreationDate(String date);

    @Click(REGISTRY_TYPE)
    CustomerPage clickRegistryType();

    @Click(REGISTRY_TYPE_FIELD)
    CustomerPage chooseRegistryType();

    @Click(NUMBER_OF_EMPLOYEES)
    CustomerPage clickNoOfEmployees();

    @Click(NUMBER_OF_EMPLOYEES_FIELD)
    CustomerPage chooseNoOfEmployees();

    @Click(BUSINESSMAN_SILENT_COMPANION)
    CustomerPage clickBusinessmanSilentCompanion();

    @Click(value = FIRST_REPRESENTATIVE_COMPANY_ROLE, jsClick = true)
    CustomerPage clickCompanyRole();

    @Click(value = FIRST_REPRESENTATIVE_COMPANY_ROLE_CHOOSE, jsClick = true)
    CustomerPage chooseCompanyRole(CompanyRole companyRole);

    @Wait(value = FIRST_REPRESENTATIVE_NAME, until = Until.CLICKABLE)
    @TypeInto(FIRST_REPRESENTATIVE_NAME)
    CustomerPage typeFirstRepresentativeName(String name);

    @TypeInto(FIRST_REPRESENTATIVE_SURENAME)
    CustomerPage typeFirstRepresentativeSurname(String surname);

    @TypeInto(FIRST_REPRESENTATIVE_TITLE_BEFORE)
    CustomerPage typeFirstRepresentativeTitleBefore(String titleBefore);

    @TypeInto(FIRST_REPRESENTATIVE_TITLE_AFTER)
    CustomerPage typeFirstRepresentativeTitleAfter(String titleAfter);

    @Click(value = FIRST_REPRESENTATIVE_NATIONALITY, jsClick = true)
    CustomerPage clickFirstRepresentativeNationality();

    @Click(value = FIRST_REPRESENTATIVE_NATIONALITY_CHOOSE, jsClick = true)
    CustomerPage chooseFirstRepresentativeNationality(Nationality nationality);

    @Click(value = FIRST_REPRESENTATIVE_COUNTRY, jsClick = true)
    CustomerPage clickFirstRepresentativeCountry();

    @Click(value = FIRST_REPRESENTATIVE_COUNTRY_CHOOSE, jsClick = true)
    CustomerPage chooseFirstRepresentativeCountry(Country country);

    @Click(value = FIRST_REPRESENTATIVE_STAY_TYPE, jsClick = true)
    CustomerPage clickFirstRepresentativeStayType();

    @Click(value = FIRST_REPRESENTATIVE_STAY_TYPE_CHOOSE, jsClick = true)
    CustomerPage chooseFirstRepresentativeStayType(StayType stayType);

    @TypeInto(FIRST_REPRESENTATIVE_PIN)
    CustomerPage typeFirstRepresentativePin(String pin);

    @CheckElementPresent(FIRST_REPRESENTATIVE_BIRTHDATE)
    CustomerPage checkFirstRepresentativeBirthdate(Birthdate birthdate);

    @TypeInto(FIRST_REPRESENTATIVE_BIRTHPLACE)
    CustomerPage typeFirstRepresentativeBirthplace(String birthplace);

    @Click(value = FIRST_REPRESENTATIVE_IDENTIFICATION_TYPE)
    CustomerPage clickFirstRepresentativeIdentificationType();

    @Click(value = FIRST_REPRESENTATIVE_IDENTIFICATION_TYPE_CHOOSE, jsClick = true)
    CustomerPage chooseFirstRepresentativeIdentificationType(IdentificationType identificationType);

    @TypeInto(FIRST_REPRESENTATIVE_IDENTIFICATION_ID_NUMBER)
    CustomerPage typeFirstRepresentativeIdentificationIdNumber(String identificationIdNumber);

    @TypeInto(FIRST_REPRESENTATIVE_IDENTIFICATION_ID_VALIDITY)
    CustomerPage typeFirstRepresentativeIdentificationIdValidity(String identificationIdValidity);

    @TypeInto(FIRST_REPRESENTATIVE_PHONE_NUMBER)
    CustomerPage typeFirstRepresentativePhoneNumber(String phoneNumber);

    @TypeInto(FIRST_REPRESENTATIVE_OTHER_PHONE_NUMBER)
    CustomerPage typeFirstRepresentativeOtherPhoneNumber(String otherPhoneNumber);

    @Wait(explicitWaitSeconds = 1)
    @TypeInto(FIRST_REPRESENTATIVE_CONTACT_ADDRESS)
    CustomerPage typeFirstRepresentativeContactAddress(String contactAddress);

    @Click(value = FIRST_REPRESENTATIVE_CONTACT_ADDRESS_CHOOSE)
    CustomerPage clickFirstRepresentativeContactAddress(Address address);

    @TypeInto(FIRST_REPRESENTATIVE_PERMANENT_ADDRESS)
    CustomerPage typeFirstRepresentativePermanentAddress(String contactAddress);

    @Click(value = FIRST_REPRESENTATIVE_PERMANENT_ADDRESS_CHOOSE)
    CustomerPage clickFirstRepresentativePermanentAddress(Address address);

    @TypeInto(BUSINESSMAN_ACCOUNT_NUMBER)
    CustomerPage typeBusinessmanAccountNumber(String accountNumber);

    @Click(value = BUSINESSMAN_BANK_CODE)
    CustomerPage clickBusinessmanBankCode();

    @Click(BUSINESSMAN_BANK_CODE_CHOOSE)
    CustomerPage chooseBusinessmanBankCode(BankCode bankCode);

    @Click(BUSINESSMAN_TAX_RECORDS)
    CustomerPage clickBusinessmanTaxRecords();

    @Click(BUSINESSMAN_DOUBLE_ENTRY)
    CustomerPage clickBusinessmanDoubleEntry();

    @TypeInto(BUSINESSMAN_TAX_RECORDS_OWN_ASSETS)
    CustomerPage typeBusinessmanTaxRecordsOwnAssets(int ownAssets);

    @TypeInto(BUSINESSMAN_TAX_RECORDS_INCOME_COMMITMENT_SUM)
    CustomerPage typeBusinessmanTaxRecordsIncomeCommitmentSum(int incomeCommitmentSum);

    @TypeInto(BUSINESSMAN_TAX_RECORDS_INCOME_COMMITMENT_DIFFERENCE)
    CustomerPage typeBusinessmanTaxRecordsIncomeCommitmentDifference(int incomeCommitmentDifference);

    @TypeInto(BUSINESSMAN_TAX_RECORDS_SHORT_TERM_RECEIVABLES)
    CustomerPage typeBusinessmanTaxRecordsShortTimeReceivables(int shortTimeReceivables);

    @TypeInto(BUSINESSMAN_TAX_RECORDS_INCOME_TOTAL)
    CustomerPage typeBusinessmanTaxRecordsIncomeTotal(int incomeTotal);

    @TypeInto(BUSINESSMAN_DOUBLE_ENTRY_EQUITY)
    CustomerPage typeBusinessmanDoubleEntryEquity(int equity);

    @TypeInto(BUSINESSMAN_DOUBLE_ENTRY_FOREIGN_SOURCES)
    CustomerPage typeBusinessmanDoubleEntryForeignSources(int foreignSources);

    @TypeInto(BUSINESSMAN_DOUBLE_ENTRY_PROFIT_BEFORE_TAX)
    CustomerPage typeBusinessmanDoubleEntryProfitBeforeTax(int profitBeforeTax);

    @TypeInto(BUSINESSMAN_DOUBLE_ENTRY_SHORT_TIME_RECEIVABLES)
    CustomerPage typeBusinessmanDoubleEntryShortTimeReceivables(int shortTimeReceivables);

    @TypeInto(BUSINESSMAN_DOUBLE_ENTRY_INCOME_TOTAL)
    CustomerPage typeBusinessmanDoubleEntryIncomeTotal(int incomeTotal);

    @Click(ADD_REPRESENTATIVE)
    CustomerPage clickAddRepresentative();

    @Click(value = SECOND_REPRESENTATIVE_COMPANY_ROLE, jsClick = true)
    CustomerPage clickSecondCompanyRole();

    @Click(value = SECOND_REPRESENTATIVE_COMPANY_ROLE_CHOOSE, jsClick = true)
    CustomerPage chooseSecondCompanyRole(CompanyRole companyRole);

    @TypeInto(SECOND_REPRESENTATIVE_NAME)
    CustomerPage typeSecondRepresentativeName(String name);

    @TypeInto(SECOND_REPRESENTATIVE_SURENAME)
    CustomerPage typeSecondRepresentativeSurname(String surname);

    @TypeInto(SECOND_REPRESENTATIVE_TITLE_BEFORE)
    CustomerPage typeSecondRepresentativeTitleBefore(String titleBefore);

    @TypeInto(SECOND_REPRESENTATIVE_TITLE_AFTER)
    CustomerPage typeSecondRepresentativeTitleAfter(String titleAfter);

    @Click(value = SECOND_REPRESENTATIVE_NATIONALITY, jsClick = true)
    CustomerPage clickSecondRepresentativeNationality();

    @Click(value = SECOND_REPRESENTATIVE_NATIONALITY_CHOOSE, jsClick = true)
    CustomerPage chooseSecondRepresentativeNationality(Nationality nationality);

    @Click(value = SECOND_REPRESENTATIVE_COUNTRY, jsClick = true)
    CustomerPage clickSecondRepresentativeCountry();

    @Click(value = SECOND_REPRESENTATIVE_COUNTRY_CHOOSE, jsClick = true)
    CustomerPage chooseSecondRepresentativeCountry(Country country);

    @TypeInto(SECOND_REPRESENTATIVE_PIN)
    CustomerPage typeSecondRepresentativePin(String pin);

    @CheckElementPresent(SECOND_REPRESENTATIVE_BIRTHDATE)
    CustomerPage checkSecondRepresentativeBirthdate(Birthdate birthdate);

    @TypeInto(SECOND_REPRESENTATIVE_BIRTHPLACE)
    CustomerPage typeSecondRepresentativeBirthplace(String birthplace);

    @Click(value = SECOND_REPRESENTATIVE_IDENTIFICATION_TYPE)
    CustomerPage clickSecondRepresentativeIdentificationType();

    @Click(value = SECOND_REPRESENTATIVE_IDENTIFICATION_TYPE_CHOOSE, jsClick = true)
    CustomerPage chooseSecondRepresentativeIdentificationType(IdentificationType identificationType);

    @TypeInto(SECOND_REPRESENTATIVE_IDENTIFICATION_ID_NUMBER)
    CustomerPage typeSecondRepresentativeIdentificationIdNumber(String identificationIdNumber);

    @TypeInto(SECOND_REPRESENTATIVE_IDENTIFICATION_ID_VALIDITY)
    CustomerPage typeSecondRepresentativeIdentificationIdValidity(String identificationIdValidity);

    @TypeInto(SECOND_REPRESENTATIVE_PHONE_NUMBER)
    CustomerPage typeSecondRepresentativePhoneNumber(String phoneNumber);

    @TypeInto(SECOND_REPRESENTATIVE_OTHER_PHONE_NUMBER)
    CustomerPage typeSecondRepresentativeOtherPhoneNumber(String otherPhoneNumber);

    @TypeInto(SECOND_REPRESENTATIVE_CONTACT_ADDRESS)
    CustomerPage typeSecondRepresentativeContactAddress(String contactAddress);

    @Click(value = SECOND_REPRESENTATIVE_CONTACT_ADDRESS_CHOOSE, andWait = @Wait(value = SECOND_REPRESENTATIVE_CONTACT_ADDRESS_RUIAN_VERIFICATION, waitSecondsForElement = 30), jsClick = true)
    CustomerPage clickSecondRepresentativeContactAddress(Address address);

    @Click(value = CommonElements.SAVE_CALCULATION_BUTTON, andWait = @Wait(value = CommonElements.SUCCESSFUL_SAVED_CALCULATION_MESSAGE, until = Until.VISIBLE), jsClick = true)
    CustomerPage clickSaveCalculation();

    @TypeInto(FIRST_REPRESENTATIVE_EMAIL_ADDRESS)
    CustomerPage typeFirstRepresentativeEmailAddress(String email);

    @TypeInto(SECOND_REPRESENTATIVE_EMAIL_ADDRESS)
    CustomerPage typeSecondRepresentativeEmailAddress(String email);
}
