When(/^I create a film release$/) do
  on(ReactWorkstation::ReactHomePage) do |page|
    page.create_new_element.when_present.click
    page.wait_until { page.create_new_element.parent.attribute_value("class").include? "open" }
    page.new_film_project
  end
end

When(/^I add initial film release basics$/) do
  @data = DataHelpers::ReleaseBuilderData.film_release
  on(Workstation::CreateFilmReleaseModal) do |page|
    page.populate_video_basics(@data)
    page.add_new_brand
  end
  on(Workstation::CreateVolumeModal).create_volume(@data["studio"])
  on(Workstation::CreateFilmReleaseModal) do |page|
    page.create_release
    page.save_loader_element.when_not_present(90)
  end
end

When(/^I edit film release basics and populate the remaining fields$/) do
  on(Workstation::EditFilmReleasePage) do |page|
    puts "upc assigned: #{page.digital_upc}"
    page.populate_required_fields(@data)
  end
  on(Workstation::ViewReleasePage) do |page|
    page.release_basics_data_element.when_present(30)
  end
end

When(/^I add chapter Info$/) do
  on(Workstation::ViewReleasePage).add_assets_element.when_present(60).click
  on(Workstation::EditFilmChapters) do |page|
    page.edit_chapter_title("1", "start")
    page.edit_chapter_time("2", "00:00:30:00")
    page.edit_chapter_title("2", "middle")
    page.edit_chapter_time("3", "00:01:30:00")
    page.edit_chapter_title("3", "end")
    page.save_chapters
    page.please_wait_bar_element.element.wait_while(timeout: 180, &:present?)
  end
end

Then(/^I should see chapter info saved correctly$/) do
  on(Workstation::ViewReleasePage) do |page|
    page.assets_complete_element.when_present(30)
    page.release_art_complete_element.element.wait_until(180, &:present?)
  end
end

When(/^I submit the release$/) do
  on(Workstation::ViewReleasePage) do |page|
    page.release_art_complete_element.when_present(30)
    page.submit_release
    page.confirm_film_submission_element.when_present.click
  end
end

Then(/^I should be on the manage release page$/) do
  on(Workstation::ReleaseBuilderPage) do |page|
    page.manage_releases_table_element.when_present(30)
  end
end

When(/^I upload film artwork$/) do
  on(Workstation::ViewReleasePage).add_artwork_element.when_present.element.click
  on(Workstation::EditFilmArtwork) do |page|
    page.upload_cover_art(File.join(Support::Paths.assets, "film_assets", "584x800.jpg"))
    page.upload_poster_art(File.join(Support::Paths.assets, "film_assets", "2000x3000.jpg"))
    page.wait_until(240) { page.release_art_complete? }
  end
end

Then(/^I should see film artwork validated$/) do
  on(Workstation::EditFilmArtwork).back_to_overview_element.when_present(30)
end

Then(/^I add incomplete release info$/) do
  on(Workstation::ViewReleasePage).edit_release_basics
  on(Workstation::EditFilmReleasePage) do |page|
    # Let's wait until ratings are fully loaded
    page.ratings_loading_element.element.wait_while(timeout: 30, &:present?)
    page.scroll_to :bottom # So if page#submit fails we will have a better screenshot
    page.submit_element.when_present.click
    page.scroll_to :bottom
  end
end

Then(/^I see validation errors for missing film fields$/) do
  error_text = on(Workstation::EditFilmReleasePage).validation_errors_element.when_present(15).text
  expect(error_text).to match("There has been a problem with your release. Please correct your errors.")
end
