Given(/^a Promo Player for vendor (\d+)'s release (\d+) with the (dark|light) skin$/) \
do |vendor_id, release_id, skin|
  Support::Services::OwsPromoPlayer.delete_players(release_id)
  resp = Support::Services::OwsPromoPlayer.create_player(vendor_id, release_id, skin: skin)
  @promo_player = JSON.parse(resp.body)
end

When(/^I update the Promo Player to the (dark|light) skin$/) do |skin|
  Support::Services::OwsPromoPlayer.update_player(
    @promo_player["vendor_id"],
    @promo_player["product_id"],
    @promo_player["promo_player_id"],
    skin: skin
  )
end

When(/^I go to the Promo Player's page$/) do
  visit_and_dismiss_alerts(
    PromoPlayer::PlayerPage,
    using_params: {
      code: @promo_player["code"]
    }
  )
end

When(/^I press the Promo Player's play button$/) do
  on(PromoPlayer::PlayerPage).playpause_button
end

When(/^I press the Promo Player's next button$/) do
  on(PromoPlayer::PlayerPage).next_button
end

When(/^I press the Promo Player's previous button$/) do
  on(PromoPlayer::PlayerPage).previous_button
end

When(/^I press track (\d+)'s play button$/) do |trackno|
  on(PromoPlayer::PlayerPage) do |page|
    page.tracklist_element.row(index: trackno.to_i - 1).button(class: "TrackListPlaybackControl").click
  end
end

Then(/^the Promo Player has the light skin$/) do
  on(PromoPlayer::PlayerPage) do |page|
    page.player_element.wait_until(&:present?)
    expect(page.light_player_element.exists?).to be true
    expect(page.dark_player_element.exists?).to be false
  end
end

Then(/^the Promo Player has the dark skin$/) do
  on(PromoPlayer::PlayerPage) do |page|
    page.player_element.wait_until(&:present?)
    expect(page.light_player_element.exists?).to be false
    expect(page.dark_player_element.exists?).to be true
  end
end

Then(/^the Promo Player should be on track (\d+)$/) do |track|
  on(PromoPlayer::PlayerPage) do |page|
    page.playpause_button_element.wait_until(&:present?)
    expect(page.active_track_number_element.text).to eq track.to_s
  end
end

Then(/^the Promo Player should be paused$/) do
  on(PromoPlayer::PlayerPage) do |page|
    page.playpause_button_element.wait_until(&:present?)
    expect(page.audio).to be_paused
    expect(page.play_icon_element.exists?).to be true
    expect(page.active_track_play_icon_element.exists?).to be true
  end
end

Then(/^the Promo Player should be playing$/) do
  on(PromoPlayer::PlayerPage) do |page|
    page.playpause_button_element.wait_until(&:present?)
    expect(page.audio).to_not be_paused
    expect(page.play_icon_element.exists?).to be false
    expect(page.active_track_play_icon_element.exists?).to be false
    page.wait_until { page.audio.currenttime > 0.5 }
  end
end
