When(/^I add localization for a track$/) do
  on(Project::DigitalProductTracksPage) do |page|
    @track_data = DataHelpers::TrackBuilderData.track_builder_data

    page.select_localized_language(@track_data[:localized_language])
    expect(page.loc_form_element.h3_element.text).to eql @track_data[:localized_language]

    page.populate_localization_form(@track_data)
  end
end

Then(/^the added localization is visible$/) do
  on(Project::DigitalProductTracksPage) do |page|
    expect(page.loc_add?).to be false
    eventually(timeout: 15) do
      expect(page.loc_added_element.element.present?).to be true
      expect(page.loc_added_element.text).to eq @track_data[:localized_language]
    end
    page.loc_edit_element.click
    expect(page.loc_track_name).to eql @track_data[:track_name]
  end
end

And(/^I can delete localization for a track$/) do
  on(Project::DigitalProductTracksPage) do |page|
    page.loc_trash_element.click
    eventually(timeout: 15) do
      expect(page.loc_trash?).to be false
    end
  end
end

Given(/^the product has no track localizations$/) do
  on(Project::DigitalProductTracksPage) do |page|
    page.select_first_track
    page.localized_language_element.wait_until(&:present?)
    # wait for existing localizations to load
    sleep 2
    localization_elements = page.localization_elements
    puts "Product has #{localization_elements.count} localization(s)."\
      " Deleting existing localizations..."
    localization_elements.each do |localization|
      page.loc_trash_element.click
      localization.when_not_present
    end
  end
end

And(/^the product has a track localization$/) do
  step "the product has no track localizations"
  step "I add localization for a track"
end

When(/^I delete the newly added track localization$/) do
  on(Project::DigitalProductTracksPage) do |page|
    # close localization form if it's open
    page.loc_cancel_element.click if page.loc_cancel?
    page.loc_trash_element.click
  end
end

Then(/^I shouldn't see the track localization$/) do
  on(Project::DigitalProductTracksPage) do |page|
    eventually(timeout: 15) do
      expect(page.loc_added_element.exists?).to be false
    end
  end
end

And(/^I edit localization for a track$/) do
  on(Project::DigitalProductTracksPage) do |page|
    @track_edit_data = DataHelpers::TrackBuilderData.track_builder_edit_data

    page.loc_edit_element.when_present
    page.loc_edit_element.click
    page.populate_localization_form(@track_edit_data)

    eventually(timeout: 15) do
      expect(page.loc_add?).to be false
    end
  end
end

And(/^localization is successfully updated$/) do
  on(Project::DigitalProductTracksPage) do |page|
    updated = page.wait_for_localization_to_update(@track_edit_data, 5)
    expect(updated).to be true
  end
end
