module Workstation
  class ReleaseBuilderPage < Workstation::BasePage
    include Workstation::CreateRelease

    page_url "/index/viewexareleases"

    # Status filters
    button(:filter_by_status_button, id: "status-filters")
    unordered_list(:status_filters, id: "status-checkbox-filters")
    checkbox(:delivered_box, value: "delivered")
    checkbox(:submitted_box, value: "submitted")
    checkbox(:in_progress_box, value: "in_progress")
    checkbox(:in_correction_box, value: "error_correction")
    checkbox(:action_required_box, value: "rejected")
    # Product filters
    button(:filter_by_product_type_button, id: "product-filters")
    unordered_list(:product_type_filters, id: "product-checkbox-filters")
    checkbox(:music_box, value: "digital")
    checkbox(:tv_show_box, value: "tv_show")
    checkbox(:movie_box, value: "movie")
    checkbox(:youtube_videos_box, value: "web_videos")
    # Table elements
    table(:manage_releases_table, id: "view-ex-a")

    button(:filter_link, id: "apply_filters")

    link(:select_all_link, id: "viewexareleases_selectall_link")

    button(:deactivated_delete_releases_button, class: ["btn", "btn-danger", "disabled", "submitOff"])
    button(:delete_releases_button, class: ["btn", "btn-danger"])

    divs(:release_container, class: "releaseInfo")

    # Delete releases modal

    button(:confirm_delete_releases_button, id: "delete_releases_button")

    div(:deletion_in_progress_modal, class: "general_overlay_message")

    def sort_by(field)
      field_text = case field
                   when :title
                     "Name"
                   when :date
                     "Release Date"
                   else
                     fail "unknown field type #{field}!"
                   end
      manage_releases_table_element.link_element(text: field_text).click
    end

    # Helper method for #view_release_page, returns a Watir Tr Object that
    # includes the String release_name
    def find_created_release(release_name)
      table = manage_releases_table_element.when_present.element

      re = /#{release_name}/
      matching_row = table.trs.find do |tr|
        re =~ tr.text
      end

      matching_row
    end

    # Clicks on the release matching the String release_name
    def view_release_page(release_name)
      row = find_created_release(release_name)
      fail "Cannot find release with name: #{release_name}" if row.is_a?(NilClass)
      row.link.click
      # now on(ViewReleasePage)
    end

    def no_results_found
      manage_releases_table_element[1][0].text == "No Releases Found"
    end

    def clear_all_filters_for(filter_by)
      send("filter_by_#{filter_by}_button")
      send("#{filter_by}_filters_element").when_present.element.lis.each do |checkbox_path|
        checkbox_path.element.parent.label.click
      end
    end

    def check_filter_and_get_value(filter_by)
      checkbox_element = send("#{filter_by}_box_element")
      checkbox_element.parent.click
      checkbox_element.attribute("value")
    end

    def release_row(index)
      manage_releases_table_element[index]
    end
  end
end
