Given(/^I have (single product split|multiple product splits) to apply$/) do |splits|
  case splits
  when "single product split"
    @splits = [{ "upc" => "889845790624", "split_rate" => "8.00" }]
  when "multiple product splits"
    @splits = [{ "upc" => "889845790624", "split_rate" => "8.00" },
               { "upc" => "886788064409", "split_rate" => "9.00" }]
  end
end

Then(/^I should be able to add product splits$/) do
  # splits = JSON.parse(@splits)

  on(Contract::ProductArrangement) do |page|
    @splits.each do |split|
      page.add_split(split["upc"], split["split_rate"])
      expect(page.success_message?).to be true
      expect(page.success_message_element.text).to eq(
        "Product arrangement data saved Successfully"
      ).or(
        eq("Product arrangement data updated Successfully")
      )
      page.refresh
      expect(page.clickable_table_element[1].text).to include split["upc"]
      expect(page.split_element.value).to eq split["split_rate"]
    end
  end
end

Then(/^I should be able to delete all product splits$/) do
  on(Contract::ProductArrangement) do |page|
    page.delete_all_splits
    page.no_products_message_element.when_present
    expect(page.no_products_message?).to be true
  end
end

When(/^I am on the Contract::ProductArrangement for contract (.*) with (.*)$/) do |int, split_presence|
  if @url_queries
    @url_queries[:id] = int
  else
    @url_queries = { "id" => int }
  end
  visit(Contract::ProductArrangement, using_params: {
          queries: @url_queries
        }) do |page|
    @browser.alert.ok if @browser.alert.exists?
    page.clickable_table_element.when_present
    case split_presence
    when "no splits"
      step "I should be able to delete all product splits"
    when "a split"
      step "I should be able to delete all product splits"
      step "I have single product split to apply"
      step "I should be able to add product splits"
    end
  end
end

Then("I should be able to update a product split") do
  split_value_for_update = "15.00"

  on(Contract::ProductArrangement) do |page|
    page.split_element.clear
    page.product_level_split_element.click
    page.split_with_validation_error_element.send_keys split_value_for_update
    page.submit
    expect(page.success_message_element.text).to eq("Product arrangement data updated Successfully")
    page.refresh
    expect(page.split_element.value).to eq split_value_for_update
  end
end
