module ReactWorkstation
  class CollaboratorPage < Workstation::BasePage
    page_url "/accounting/collaborators"
    link(:view_nav, text: "View")
    link(:collaborators_nav, text: "Collaborators")

    table(:collaborators_list, class: "table")
    link(:collaborator_name) do
      collaborators_list_element.link_element
    end
    divs(:loader, class: "LoaderWrapper")
    div(:search_div, class: "Select-control")
    divs(:search_bar_options, class: "SearchBar-option")
    textarea(:search_input) { search_div_element.text_field_element }
    divs(:search_result, class: "SearchBar-option-title")

    button(:generate_new_report_btn, 'data-testid': "generate-button")

    divs(:table_loader, class: "TableCellLoader-line")

    div(:product_name, class: "ProductInfo-title-container")
    button(:remove_collab, 'data-testid': "delete-button")
    span(:collaborator) do
      div_element(class: "SplitRateEditItem-collaborator-search").span_element(class: "Select-value-label")
    end
    div(:maximum_percentage_error, class: "ProductCollaboratorEditor-combined-total-error")
    div(:react_modal, class: "ReactModal-content")
    button(:get_started, class: "WelcomePage-button")

    def refresh_until_enabled
      repeats = 0
      until collaborators_nav_element.present? || repeats == 10
        refresh if repeats > 0
        wait_until { view_nav_element.present? }
        repeats += 1
      end
    end

    def search_and_select_product(product, session_token)
      enter_search_term(product)
      wait_until { search_result_elements.any? }
      wait_until { search_result_elements[0].present? }
      search_result = search_result_elements[0]
      search_result = search_result.parent until search_result.class_name == "SearchBar-option"
      search_result.click
      begin
        wait_until_page_is_loaded(product)
      rescue Watir::Exception::UnknownObjectException, Watir::Wait::TimeoutError
        refresh(session_token)
        wait_until_page_is_loaded(product)
      end
    end

    def wait_until_page_is_loaded(product)
      wait_until { product_name_element }
      wait_until { loader_elements.none? }
      wait_until(10) do
        div_element(class: "ProductInfo-title-container", text: /#{product}/).present?
      end
    end

    def enter_search_term(product)
      wait_until { search_input_element.present? }
      search_input_element.click
      throttled_input(search_input_element, product, 1, false)
    end

    def report_status?(report)
      wait_until { collaborator_name_element.present? }
      wait_until { table_loader_elements.none? }
      collaborator_row = collaborators_list_element.find { |row| row[0].text == report }
      collaborator_row[2].child.attribute_value("class")
    end
  end
end
