When(/^I populate (required|all) digital product 2 basics fields$/) do |required_or_all|
  @product_data.add_required_basics_fields
  on(Project::DigitalProductBasics2Page) do |page|
    page.populate_required_fields(@product_data.data)
    if required_or_all == "all"
      @product_data.add_optional_basics_fields
      page.populate_optional_fields(@product_data.data)
    end
  end
  Support::Helpers::ScenarioVariables.add_scenario_variable("Product data: ", @product_data.data)
end

When(
  /^I populate the digital product 2 basics dropdowns with (existing|new) options$/
) do |existing_or_new|
  on(Project::DigitalProductBasics2Page) do |page|
    if existing_or_new == "new"
      @product_data.add_new_basics_dropdown_options
      page.create_new_dropdown_options(@product_data.data)
    else
      page.select_existing_dropdown_options(@product_data.data)
    end
    Support::Helpers::ScenarioVariables.add_scenario_variable("Product data: ", @product_data.data)
  end
end

When(/^I submit the digital audio product 2 basics page form$/) do
  on(Project::DigitalProductBasics2Page).submit
  on(Project::ProductArtworkPage).artwork_dropzone_element.when_present
  # on(Project::ProductArtworkPage).basics_checkmark_element.when_present
end

Then(/^I see the correct basics data on the digital product overview page$/) do
  release_basics = on(Project::DigitalProductOverviewPage).release_basics_values(
    only_for: @product_data.fields
  )
  # need to fix subgenre correct validation - 30/06/2020
  release_basics.delete(:subgenre)
  @product_data.data.delete(:subgenre)
  expect(release_basics).to match @product_data.data
end

When(/^I replace the product's release date$/) do
  on(Project::DigitalProductPricingPage) do |page|
    page.wait_until { page.release_date_element.value != "" }
    @release_date = (Date.parse(page.release_date_element.value) + 1).to_s
    Retriable.retriable(on: Watir::Wait::TimeoutError, tries: 3) do
      # patch to clear out date field and type
      page.release_date_element.clear_text_and_type @release_date
      # maybe switch back to these when chromedriver is fixed
      # page.release_date_element.clear
      # page.release_date = @release_date
      # need to press enter to close the datepicker, otherwise it blocks the
      # next form element
      page.release_date_element.append "\n"
      page.wait_until(1) { page.release_date_element.value == @release_date }
    end
    page.save
  end
end

When(/^I replace the product name$/) do
  on(Project::DigitalProductBasicsPage) do |page|
    @product_name = "Resubmit Product #{Time.stamp}"
    page.product_name_element.clear_text_and_type @product_name
    page.submit
    Support::Helpers::ScenarioVariables.add_scenario_variable("Product name: ", @product_name)
  end
end
