When(/^I upload a spreadsheet with (valid|invalid) data$/) do |validity|
  @bulk_upload_stamp = Time.stamp
  @data = if validity == "valid"
            DataHelpers::AudioBulkUpload.valid_row(@bulk_upload_stamp)
          else
            DataHelpers::AudioBulkUpload.invalid_row
          end

  on(Workstation::BulkUploadPage) do |page|
    page.ensure_browser_is_chrome

    @spreadsheet = DataHelpers::AudioBulkUploadHelper.create_spreadsheet(
      data: @data,
      template_url: page.template_url,
      save_prefix: validity
    )
    page.upload_spreadsheet @spreadsheet
  end
end

Then(/^the spreadsheet should validate$/) do
  on(Workstation::BulkUploadPage) do |page|
    page.wait_for_loading
    unless page.errors_array.empty?
      puts "Retrying spreadsheet upload"
      page.upload_spreadsheet @spreadsheet
      page.wait_for_loading
      expect(page.errors_array).to be_empty, "Spreadsheet validation failed!"\
          " Got the following errors: #{page.errors_array}"
    end
    @release_id = page.created_release_id
    page.created_releases_element.link_element.click
  end
end

Then(/^I add the assets to the spreadsheet-created release$/) do
  @upc = on(Project::DigitalProductOverviewPage).upc_element.when_present.text
  step "I am on the Project::ProductArtworkPage for the product #{@release_id}"
  on(Project::ProductArtworkPage) { |page| page.wait_until { page.artwork_element.exist? } }
  step "I upload valid artwork"
  step "I go to the digital product tracks step"
  on(Project::DigitalProductTracksPage) { |page| page.wait_until { page.file_replace_element.exist? } }
  step "I replace track's audio file"
  step "I can see the track is processed"
  on(Project::DigitalProductTracksPage) do |page|
    page.isrc_checkbox_element.click
    page.digital_product_next_element.scroll.to
    page.digital_product_next
  end
end

Then(/^I am able to upload assets$/) do
  on(Workstation::BulkUploadPage) do |page|
    assets_directory = DataHelpers::AudioBulkUpload.bulk_upload_assets(@bulk_upload_stamp)
    page.upload_folder(assets_directory)
    page.progress_bar_element.element.wait_while(timeout: 60, &:present?)
    expect(page.upload_progress).to include "Upload Progress: 100%"
    puts page.created_releases_element.link_element.href
  end
end

Then(/^the spreadsheet should not validate$/) do
  on(Workstation::BulkUploadPage) do |page|
    page.wait_for_loading
    expect(page.errors_array).not_to be_empty,
                                     "Expected some spreadsheet validation error(s), but got no errors!"
  end
  ap on(Workstation::BulkUploadPage).errors_array
end

# Verification scenario

When(/^I search for the release$/) do
  name = @data["Release Name"]
  visit(Workstation::ReleaseBuilderPage, using_params: { queries: {
          "filterType" => "in_progress",
          "productType" => "1,2,3,5",
          "name" => name
        } })
end

When(/^I view my created release$/) do
  # don't know release_id so can't visit directly
  name = @data["Release Name"]
  on(Workstation::ReleaseBuilderPage) do |page|
    page.view_release_page(name)
  end
end

Then(/^I should see that the pricing is what I specified$/) do
  on(Workstation::ViewReleasePage) do |page|
    # wait for release basics div to load
    page.release_basics_data_element.when_present(30)
    actual = page.itunes_pricing
    expected = @data["Release iTunes Pricing"]
    expect(actual).to eq expected
  end
end

When(/^I upload an invalid spreadsheet \(or incorrect file format\)$/) do
  path_to_bad_file = File.join(Support::Paths.assets, "templates", "chrome_bulk_upload", "badfile.xls")
  on(Workstation::BulkUploadPage).upload_spreadsheet path_to_bad_file
end

Then(/^I should get an error pointing to the latest version of the spreadsheet$/) do
  on(Workstation::BulkUploadPage) do |page|
    expected = page.error_link_to_correct_spreadsheet_element.when_present.href
    expect(expected).to eq page.template_url
  end
end
