module Workstation
  class ViewReleasePage < Workstation::BasePage
    include Workstation::CreateRelease
    include Workstation::ReleaseStatusBar
    include ReleaseBasicsInfo

    page_url "/releasebuilder/view"

    class << self
      attr_accessor :reusable_release
    end

    h3(:release_status, class: "panel-title")

    span(:copy_release, id: "copy_release_button")

    # Copy Release modal
    div(:copy_release_modal, id: "modal_overlaycopyReleaseModal")
    text_field(:new_version_name, id: "version")
    text_field(:new_vendor_release_id, id: "vendorReleaseIdentifier")
    link(:copy_release_button, id: "copyrelease_button")
    div(:wait_while_copying, class: "general_overlay_message")

    # There are 4 icon on this page with this locator
    div(:status_view, class: "statusViewPage")
    link(:marketing_icon) { status_view_element.image_element(title: "Market this release") }
    link(:delivery_icon) { status_view_element.image_element(title: "View delivery report") }
    link(:analyze_sales_icon) { status_view_element.image_element(title: "Analyze sales activity") }
    link(:accounting_icon) { status_view_element.image_element(title: "View accounting data ") }

    span(:edit_release_basics_button, id: "edit_release_basics_button")
    div(:release_basics_data, class: "releaseBasicsReadOnly")
    span(:release_basics_release_version, id: "release_version")
    div(:loading, id: "onselecttrack")
    button(:confirm_delete, id: "Delete_button")
    button(:cancel_delete, id: "Cancel_button")
    div(:deletion_success, text: "Track Deleted")
    div(:deletion_in_progress, text: "Deletion in progress")
    div(:delete_modal_text_area, id: "dialog-confirm")

    # Artwork container
    image(:album_cover, id: "uploadalbumartthumb")

    # Tracks container
    button(:select_existing_tracks, id: "compilation_tool_link")
    div(:tracks_container, class: "uploadAudio")
    div(:tracks_loading) { tracks_container_element.div_element(class: "modalLoading") }
    divs(:encoding_audio, class: "encoding_audio")
    div(:trash_can, id: "trash_can")

    # Loading modals
    div(:loading_confirm_release_modal, id: "loading_imageconfirmReleaseModal")
    div(:save_track_overlay_message, class: "save_track_overlay_message")

    # Existing tracks modal
    text_field(:search_existing_tracks, id: "browse_catalog_modal_searchbox")

    # release submission modal
    span(:confirm_film_submission, id: "submit_your_release")
    button(:confirm_audio_submission, id: "submit_link")

    def tracks_in_release_table
      browser.tbody(id: "releasebuilder_tracks")
    end

    def count_tracks_in_release
      tracks_in_release_table.trs.length
    end

    # Methods for adding track via "Add Existing"
    def select_existing_track(track_name, result_number)
      # get number of tracks in release, before adding a track
      number_original = tracks_in_release_table.trs.length # should be 0 for a brand-new release

      select_existing_tracks
      search_existing_tracks_element.when_present(60).append track_name

      results_table = browser.tbody(id: "browse_catalog_modal_result_tbody")
      selecting_result = results_table.tr(index: result_number)

      Watir::Wait.until { results_table.trs.length > 1 }
      # Evaluates true when MORE than 1 result is returned, because when it's
      # still "loading" there is already 1 row
      selecting_result.click
      loading_element.element.wait_while(timeout: 60, &:present?)

      Watir::Wait.until(timeout: 60) { count_tracks_in_release > number_original }
    end

    def delete_first_track
      delete_track(0)
    end

    private

    def delete_track(track_number)
      draggable = tracks_in_release_table.tr(index: track_number).div(class: "roundedCornerBG")
      trash = trash_can_element.element

      # draggable.drag_and_drop_on trash # doesn't work because image target is too small
      # Workaround is to drop-down into Selenium::WebDriver...when it is fixed, just use line above.
      draggable.fire_event("onmousedown")
      driver = browser.driver
      driver.action.click_and_hold(draggable.wd).perform

      driver.action.move_to(trash.wd, -135, 0).perform
      # Move to center of trash div, but 135 pixels to the left, so it's exactly on the trash can

      draggable.fire_event("onmouseup")
      # end selenium-webdriver workaround
    end

    # End methods for adding track via "Add Existing"
  end
end
