class PartialContext < CmsContext
  
  def initialize
    super
    @partials = [{'name' => 'CTA', 'devs_only' => 'false'}, {'name' => 'Footer', 'devs_only' => 'false'}, {'name' => "Nav Menu", "devs_only" => 'false'}]
  end

  def create_partial(name)
    @name = name
    click_a_tag("Add Partial")
    within('.admin-modal') do
      fill_in_by_data_field('name', name)
      click_and_wait("Add Partial")
    end
  end

  def delete_field
    @old_order_and_ids = get_order_and_id_hash(PartialField.where(partial_id: @partial_id))
    field = PartialField.find_by(name: @field_value, partial_id: @partial_id)
    @deleted_order = field.order
    delete_and_save("#field-#{@deleted_order}")
  end

  def expect_all_pages
    page_names = PagePartial.where(partial_id: @partial_id).map {|page_partial| page_partial.page.name}
    page_names.uniq.each {|name| expect_content_on_page(name)}
  end

  def expect_field_to_exist(name)
    field = PartialField.find_by(name: name, partial_id: @partial_id)
    expect_same_field_values(field, @field_values)
  end

  def expect_field_not_in_database(name)
    field = PartialField.find_by(name: name, partial_id: @partial_id)
    expect(field).to be_falsey
  end

  def expect_in_database
    expect(Partial.find_by(name: @name)).to be_truthy
  end

  def expect_not_in_database(name)
    expect(Partial.find_by(name: name)).to be_falsey
  end

  def expect_in_index
    expect_content_on_page(@name)
  end

  def expect_on_details_page
    expect_input_value_on_page(@name)
    expect_content_on_page('Partial Details')
  end

  def expect_order_rearranged
    expect(order_rearranged?(PartialField.where(partial_id: @partial_id))).to be_truthy
  end

  private

  def get_step_fields
    {
      'Small Header Width' => {
        'mandatory' => 'no',
        'field_type' => 'number'
      }
    }
  end

  def set_original_field_values(field)
    partial_field = PartialField.find_by(field => @field_value, partial_id: @partial_id)
    @field_values = PartialField.column_names.map {|name|[name, convert_to_frontend_format(partial_field[name])]}.to_h
  end
end
