module Royalties
  class AddContractPage < RoyaltiesPage
    page_url "/contracts/new"

    text_field(:contract_name, id: "contractName")
    text_field(:label_share, id: "netShare")
    button(:create_contract, text: "Create")
    text_field(:contract_start, name: "start")
    text_field(:contract_end, name: "end")
    div(:alert_success, class: %w[alert alert-success])

    text_field(:payee_field) do
      div_element(id: "payeeSearch").text_field_element
    end

    text_field(:runcontroller_dropdown) do
      div_element(id: "runControllerSelect").text_field_element
    end

    def select_runcontroller(runcontroller)
      runcontroller_dropdown_element.set runcontroller
      div_element(class: %w[Select__option Select__option--is-focused]).click
    end

    text_field(:vendor_field) do
      div_element(class: "GlobalSearchResults", index: 1).text_field_element
    end

    divs(:dropdown_options, class: "Select-option")

    def retry_select_and_assert(react_list, select_data)
      Retriable.retriable(on: RSpec::Expectations::ExpectationNotMetError, tries: 3) do
        send("select_#{react_list}", select_data)
        expect(send(react_list)).to eq select_data
      end
    end

    def select_payee(payee_name)
      payee_field_element.set payee_name
      div_element(class: "Select__option--is-focused").click
    end

    def select_vendor(vendor_id)
      # vendor_field_element.click
      vendor_field_element.send_keys vendor_id
      wait_until { dropdown_options_elements.count > 0 }
      dropdown_options_elements[0].click
    end

    def select_start_date(date)
      contract_start_element.send_keys date
      driver.execute_script("arguments[0].click();", contract_name_element.wd)
    end

    def select_end_date(date)
      contract_end_element.send_keys date
      driver.execute_script("arguments[0].click();", contract_name_element.wd)
    end

    def select_contract_type(type)
      button_element(text: type.upcase).click
    end

    def fill_and_create_contract(
        contract_payee, contract_runcontroller, _contract_vendor_id, _contract_label_share
    )
      contract_start_date = Date.today.to_s
      contract_end_date = (Date.today + 30).to_s
      contract_name = "orcd_autotest_#{Time.now.strftime('%s')}"

      select_start_date contract_start_date
      select_end_date contract_end_date
      contract_name_element.send_keys contract_name
      select_payee contract_payee
      select_runcontroller(contract_runcontroller)

      # select_vendor contract_vendor_id
      # label_share_element.send_keys contract_label_share
      select_contract_type("distribution")
      create_contract
      expect(alert_success_element.present?)
      contract_name
    end
  end
end
