module ReactWorkstation
  class ReactEngagementPage < Workstation::BasePage
    page_url("/analytics/engagement")
    # sections
    div(:filters, class: "Filters")
    div(:listened, class: "StreamsSummary")
    div(:graph, class: "Graph")
    div(:placements, class: "TopPlacements")
    # date filter
    div(:month_toggle, text: "1 month")
    div(:week_toggle, text: "1 week")
    div(:year_toggle, text: "1 year")
    link(:last_year_filter, text: "Last 12 Months")
    link(:last_month_filter, text: "Last 30 Days")
    link(:last_week_filter, text: "Last 7 Days")
    link(:custom_range_filter, class: "Filters-custom-date")
    button(:custom_done, class: "Done-button")
    button(:date_filter, class: "Filters-period")
    div(:start_date, class: "Start-date")
    div(:end_date, class: "End-date")
    text_field(:custom_date_field, class: "DateField-form-control")
    div(:search_div, class: "Select-input")
    div(:search_container, class: "Select-control")
    textarea(:search_input) { search_div_element.text_field_element }
    div(:search_results, role: "option")
    div(:graph_loading_indicator, class: "LoadingIndicator")
    span(:total_streams_header, text: "Total streams")
    span(:listeners_collection_header, text: "Listener's Collection")
    span(:active_discovery_header, text: "Active Discovery")
    span(:passive_discovery_header, text: "Passive Discovery")
    h2(:total_streams) { total_streams_header_element.parent.h2_element }
    div(:streams_summary_discovery, id: "streams-summary-discovery")
    h2(:total_streams_ff) { streams_summary_discovery_element.h2_element(class: "StreamsTile-value") }
    h2(:total_saves) { div_element(id: "streams-summary-saves").h2_element(class: "StreamsTile-value") }
    h2(:listeners_collection) { listeners_collection_header_element.parent.h2_element }
    span(:listeners_collection_ff) do
      listeners_collection_header_element.parent.span_element(class: "StreamsDiscovery-content")
    end
    h2(:active_discovery) { active_discovery_header_element.parent.h2_element }
    span(:active_discovery_ff) do
      active_discovery_header_element.parent.span_element(class: "StreamsDiscovery-content")
    end
    h2(:passive_discovery) { passive_discovery_header_element.parent.h2_element }
    span(:passive_discovery_ff) do
      passive_discovery_header_element.parent.span_element(class: "StreamsDiscovery-content")
    end
    span(:no_streams) { streams_summary_discovery_element.span(class: "StreamsSummary-empty-value") }
    div(:first_search_result, class: "Select-option")
    div(:search_results_isrc, class: "SearchResultsItem-isrc")
    div(:date, class: "Date")
    div(:results_container, class: "Select-menu-outer")
    div(:search_results, class: "Select-option")
    div(:selected_track_div, class: "SelectedTrack")
    h4(:selected_track_title, class: "SelectedTrack-title")
    h4(:selected_track_artist, class: "SelectedTrack-artist")
    div(:playlist_marker, class: "Marker-content")
    div(:search_placeholder_text, class: "Select-placeholder")
    div(:loading_indicator_dot, class: "LoadingIndicator-loader-dot")
    div(:placements_no_data, class: "TopPlacements-no-data")
    h4(:track_title, class: "RestyledSelectedTrack-title")
    h4(:track_artist, class: "RestyledSelectedTrack-artist")
    elements(:playlist_row, class: "TopPlacements-column")
    div(:playlist_name, class: "PlacementsTile-playlist-title-available")
    ps(:placement_titles) { p_element(class: "PlacementsTile-track-title").p_elements }
    div(:playlist_song_name, class: "PlacementsTile-track-title")
    b(:playlist_date_added, class: "PlacementsTile-info-value")
    div(:filters, class: "Filters")
    button(:artist_track_search_toggle) { div_element(id: "SearchRowDropdown").button_element }
    link(:artist_search_toggle, class: "SearchRow-dropdown-item-artist")
    link(:tracks_search_toggle, class: "SearchRow-dropdown-item-track")
    # Playlist Placements
    div(:playlist_placements_container_wrapper, class: %w[TopPlacements clearfix])
    div(:playlist_placements_table_wrapper, class: "PlaylistPlacements")
    table(:playlist_placements_table) { playlist_placements_table_wrapper_element.table_element }
    divs(:playlist_placements, class: %w[TopPlacements-row row])
    # Placement Graph indicators
    divs(:playlist_placement_marker, class: "Marker-store")
    # Placement Tiles
    div(:placements_tile, class: "PlacementsTile")
    divs(:placements_tile, class: "PlacementsTile")
    ps(:placement_tile_track, class: "PlacementsTile-track-title-and-artist")
    bs(:placement_tile_track_title, class: "PlacementsTile-track-title")
    spans(:placement_tile_artist_name, class: "PlacementsTile-artist-name")
    divs(:placement_tile_track_div, class: "PlacementsTile-title")
    divs(:placement_tile_background_image, class: "PlacementsTile-image-column-inner")
    ps(:placement_tile_followers, text: "Followers")
    # for custom_date_range
    def set_the_date(elem, date)
      field = text_field_element(name: elem)
      field.send_keys [:control, "a"], :backspace
      date.split("").each do |char|
        field.click
        field.send_keys char
      end
    end

    def click_date_filter
      wait_until { date_filter? }
      click_with_javascript(date_filter_element)
    end

    def get_multiplier(value)
      @multiplier = 1
      @multiplier = 1_000 if value.include?("k") || value.include?("K")
      @multiplier = 1_000_000 if value.include?("M")
      @multiplier = 1_000_000_000 if value.include?("B")
      @multiplier
    end
  end
end
