module Royalties
  class AddPayeePage < RoyaltiesPage
    page_url "/payees/new"

    text_field(:payee_name, id: "payeeName")

    text_field(:contact_name, id: "contactName")
    text_field(:contact_email, id: "email")
    text_field(:contact_phone, id: "phoneNumber")
    text_area(:contact_address, name: "address")
    text_field(:contact_city, id: "city")
    text_field(:contact_state_province, id: "stateProvinceRegion")
    text_field(:contact_postal_code, id: "postalCode")
    text_field(:payment_minimum, id: "paymentMinimum")
    div(:payment_currency, id: "payeeCurrency")
    div(:payment_agreement, id: "paymentAgreement")
    div(:payment_schedule, id: "paymentSchedule")
    div(:contact_country, css: "div[class*='select-country']")

    div(:success_message, class: %w[alert alert-success])

    react_select(:runcontroller_dropdown) do
      div_element(class: "PaymentForm").div_element(class: "Select-control")
    end

    div(:payee_type_dropdown) do
      label_element(for: "payeeType").parent
    end

    def select_contact_country(country)
      contact_country_element.click
      contact_country_element.text_field_element.send_keys country
      div(css: "div[class*='is-focused']", text: country).click
    end

    def select_payee_currency(currency)
      payment_currency_element.click
      payment_currency_element.text_field_element.send_keys currency
      div(css: "div[class*='is-focused']", visible_text: currency).click
    end

    def select_payment_schedule(schedule)
      payment_schedule_element.click
      payment_schedule_element.text_field_element.send_keys schedule
      div(css: "div[class*='is-focused']", text: schedule).click
    end

    div(:payment_agreement_dropdown) do
      label_element(for: "paymentAgreement").parent
    end

    button(:create_payee, text: "Create")
    button(:save_payee, text: "Save")

    def select_payee_type(payee_type)
      button(text: payee_type).click
    end

    def select_payment_agreement_type(type)
      payment_agreement_element.click
      payment_agreement_element.text_field_element.send_keys type
      div(css: "div[class*='is-focused']", text: type).click
    end

    def return_new_payment_contact_details
      { contact_name: "test contact name",
        contact_email: "foo@bar.com",
        contact_phone: "1234567890",
        contact_address: "test contact address",
        contact_city: "Lublin",
        contact_state_province: "Lublin",
        contact_postal_code: "20-635",
        contact_country: "Poland" }
    end

    def return_edit_payment_contact_details
      { contact_name: "new test contact name",
        contact_email: "bar@foo.com",
        contact_phone: "0987654321",
        contact_address: "new test contact address",
        contact_city: "Zublin",
        contact_state_province: "Zublin",
        contact_postal_code: "20-639",
        contact_country: "Ukraine" }
    end

    # rubocop:disable Metrics/AbcSize
    def fill_payee_payment_contact(contact_data)
      select_contact_country contact_data[:contact_country]
      contact_name_element.set contact_data[:contact_name]
      contact_email_element.set contact_data[:contact_email]
      contact_phone_element.set contact_data[:contact_phone]
      contact_address_element.set contact_data[:contact_address]
      contact_city_element.set contact_data[:contact_city]
      contact_state_province_element.set contact_data[:contact_state_province]
      contact_postal_code_element.set contact_data[:contact_postal_code]
      create_payee
    end
    # rubocop:enable Metrics/AbcSize

    def fill_payee_basics(payee_name, payee_type, payee_currency)
      payee_name_element.send_keys payee_name
      select_payee_type payee_type
      select_payee_currency payee_currency
      select_payment_agreement_type "The Orchard"
      select_payment_schedule "90 days after quarter end"
      payment_minimum_element.set "450.00"
    end
  end
end
