module ReactWorkstation
  class ReactComparisonToolPage < UniversalPage
    page_url "/analytics/comparison"

    div(:frontend_analytics, class: "FrontendAnalytics")
    divs(:loader, class: "LoaderWrapper")
    button(:add_a_song, class: "SelectSong-button")
    div(:search_for_song_popup, class: "SoundRecordingSearch")
    text_field(:song_search_field) do
      search_for_song_popup_element.text_field
    end
    divs(:search_result, class: "GlobalSearchResults-option")
    div(:date_filter, class: "ComparisonFilters-date")
    span(:date_filter_dropdown_arrow) do
      date_filter_element.span_element(class: "Select-arrow")
    end

    div(:performance_over_time_chart, class: "PerformanceChart")
    div(:source_of_streams_chart, class: "SourceOfStreamsChart")
    rects(:streams_bar) do
      source_of_streams_chart_element.rect_elements(class: "highcharts-point")
    end
    div(:streams_by_subscription_chart, class: "StreamsBySubscriptionChart")
    divs(:top_playlist, class: "TopPlaylistItem")
    divs(:top_country, "data-testid": "TopCountryItem")
    div(:top_audience_by_age_chart, "data-testid": "TopAudienceByAge")
    rects(:age_bar) do
      top_audience_by_age_chart_element.rect_elements(class: "highcharts-point")
    end
    div(:top_audience_by_gender_chart, "data-testid": "TopAudienceByGender")
    rects(:gender_bar) do
      top_audience_by_gender_chart_element.rect_elements(class: "highcharts-point")
    end

    def search_for_a_song(search_term)
      add_a_song
      wait_until { search_for_song_popup.present? }
      throttled_input(song_search_field_element, search_term)
    end

    def search_and_select_a_song(search_term)
      search_for_a_song(search_term)
      wait_until { search_result_elements.any? }
      search_result_elements[0].click
      wait_until { loader_elements.none? }
    end

    def select_period(period)
      date_filter_dropdown_arrow_element.click
      div_element(class: "Select-option", text: period).click
      wait_until { loader_elements.none? }
    end

    def top_territories_populated?
      expect(top_country_elements[0].div_element(class: "TopCountryItem-title").text).to match(/(.+)/)
      expect(top_country_elements[0].div_element(class: "TopCountryItem-value").text).to match(/(\d+.?\d*)/)
      expect(top_country_elements[0].div_element(class: "ProgressBar-bar").present?).to be true
    end

    def top_audience_populated?
      wait_until { age_bar_elements.any? }
      expect(age_bar_elements.count).to be_between(1, 8).inclusive
      expect(gender_bar_elements.count).to be_between(1, 3).inclusive
    end
  end
end
