module OA
  class TrackPage < OA::BasePage
    include OA::ServerValidation

    page_url "/cont_mgmt/edit_track.php"

    button(:add_track_button, name: "add_release")
    button(:delete_last_track_button) do
      form_elements(name: /edit_track/).last.button_element(value: "Delete")
    end
    button(:delete_button, value: "Delete")
    button(:update_button, name: "update_release")
    div(:green_confirmation_message, class: "alertConfirm")
    div(:error_notification, id: "edit_track_form_error_message1")
    element(:closed_caption_field, :tr, id: "closed_caption_row1")
    text_field(:video_id_field_for_track_one, name: "video_params[youtube_video_id]")
    text_field(:new_track_name, name: "track_name1")
    text_field(:new_video_id_field, name: "video_id1")
    select_list(:new_country_of_recording, name: "recording_country1")
    select_list(:new_track_language, id: "add_meta_language1")
    select_list(:new_track_type, id: "add_track_type1")

    # All of the below fields are for the 1st track in the release
    select_list(:first_track_type, name: "track_type")
    text_field(:first_track_cd, name: "cd")
    text_field(:first_track_name, name: "track_name")
    text_field(:first_track_version, name: "version")
    text_field(:first_track_run_time_hours, name: "length_hour")
    text_field(:first_track_run_time_minutes, name: "length_minute")
    text_field(:first_track_run_time_seconds, name: "length_seconds")
    select_list(:first_track_explicit, name: "explicit_lyrics")
    select_list(:first_track_offer_type, name: "offertype")
    text_area(:first_track_writer, name: "writer")
    text_field(:first_track_performing_org, name: "publish_company")
    select_list(:first_track_dpd_license, name: "dpd_license")
    text_field(:first_track_p_line, name: "p_line")
    select_list(:first_track_mechanical, name: "mechanical")
    select_list(:first_track_third_party_publisher, name: "third_party_publisher")
    select_list(:first_track_royalty_collection, name: "royalty_collection")
    select_list(:first_track_publishing_admin, name: "publishing_admin")
    select_list(:first_track_synchronization, name: "sync_admin")
    select_list(:first_track_meta_language, name: "meta_language")
    select_list(:first_track_country_of_recording, name: "recording_country")
    text_field(:first_track_year_recording, name: "recording_year")
    text_area(:first_track_publisher, name: "publisher")
    text_field(:first_track_retail_price, name: "download_price")
    select_list(:first_track_hidden_track, name: "hidden")
    text_field(:first_track_mp3_url, name: "mp3_url")
    select_list(:first_track_stereo_mono, name: "stereo_or_mono")
    text_field(:first_track_preview_start_time, name: "preview_start_time")
    checkbox(:first_track_bonus_track, name: "bonus")
    checkbox(:first_track_pre_order, name: "preorder_only")

    # NEW lnc fields. Enable by calling: `step 'oa_edit_track_lnc_fields is enabled'`
    select_list(:first_track_us_publishing, name: "us_publishing")
    select_list(:first_track_master_rights, name: "master_rights")
    text_field(:first_track_iswc1, name: "iswcPartA")
    text_field(:first_track_iswc2, name: "iswcPartB")
    text_field(:first_track_iswc3, name: "iswcPartC")
    text_field(:first_track_iswc4, name: "iswcPartD")
    text_field(:first_track_iswc5, name: "iswcPartE")

    # Crop Information
    text_field(:crop_top, id: "crop_top")
    text_field(:crop_bottom, id: "crop_bottom")
    text_field(:crop_left, id: "crop_left")
    text_field(:crop_right, id: "crop_right")

    def add_new_track(data)
      self.new_track_type = data[:track_type]
      new_video_id_field_element.when_present.set data[:id]
      self.new_track_name = data[:name]
      self.new_track_language = data[:language]
      self.new_country_of_recording = data[:country]
      if closed_caption_field_element.exists?
        closed_caption_field_element.element.radio(value: "1").set
      end
      add_track_button
    end

    def delete_last_track
      if browser.name == :chrome
        wait_until { delete_last_track_button? }
        click_with_javascript(delete_last_track_button_element)
      else
        delete_last_track_button_element.when_present.click
      end
      wait_until { green_confirmation_message == "1 tracks successfully deleted." }
      fail unless green_confirmation_message_element.element.text.include? "1 tracks successfully deleted."
      green_confirmation_message
    end

    def crop_on_endpoint
      uri = "https://qa-ows-product-film.theorchard.io/track/19011550/crop-information"
      JSON.parse(Net::HTTP.get(URI(uri)))
    end
  end
end
