module OA
  class VideoContentReportPage < OA::BasePage
    page_url("/oa/contentreport/video/")

    radio_button(:movie_radio, id: "product_type-3")
    radio_button(:tv_show_radio, id: "product_type-2")
    text_field(:date_from, id: "date_from")
    text_field(:date_to, id: "date_to")
    select_list(:genres, id: "genres")
    select_list(:sub_genres, id: "subGenres")
    button(:run_report, id: "run_report")
    button(:reset, id: "reset_content_report")
    div(:confirm_report, class: "alertConfirm")
    div(:report_error_message, id: "contentreport_error_message")
    div(:loading_spinner, id: "loadingmessage")

    def wait_for_loading_spinner_to_disappear
      # don't want to wait for the spinner to appear first -- sometimes, the
      # spinner will disappear too quickly for the grid
      loading_spinner_element.element.wait_while(timeout: 90, &:present?)
    end

    def fill_out_movie_report
      movie_radio
      self.genres = "Animation"
      self.date_from = "2014-07-01"
      self.date_to = "2014-07-31"
      self.sub_genres = "Comedy"
    end

    def select_product_type(product_type)
      selected_product_type = product_type.to_snake_case
      return if send "#{selected_product_type}_radio_selected?"
      send "select_#{selected_product_type}_radio"
      wait_for_loading_spinner_to_disappear
    end

    def select_genre(genre)
      original_subgenre = sub_genres_options.first
      self.genres = genre
      wait_until { sub_genres_options.first != original_subgenre }
    end
  end
end
