module OA
  class LocalizationsPage < OA::BasePage
    page_url "/localization/viewrelease/releaseId/<%=params[:release_id]%>"

    links(:delete_localization, text: "×")
    link(:add_localization, text: "Add Localization")
    button(:save_changes, value: "Save Changes")
    indexed_property(
      :localizations,
      [
        [:select, :language, { name: "release[%s][language_id]" }],
        [:text_field, :release_name, { name: "release[%s][product_name]" }],
        [:text_area, :long_synopsis, { name: "release[%s][long_synopsis]" }],
        [:text_area, :short_synopsis, { name: "release[%s][short_synopsis]" }]
      ]
    )

    def delete_film_localizations
      localization_table = table_element(id: current_url[/\d+/])
      unless localization_table.rows == 1
        delete_localization_elements.each(&:click)
        @browser.alert.ok
        save_changes
      end
      fail "Localizations not cleared" unless localization_table.row_elements.size == 1
    end

    def add_film_localizations(languages)
      languages.to_enum.with_index(1) do |fresh_data, index|
        add_single_film_localization(fresh_data, index)
      end
    end

    def add_single_film_localization(data, index)
      add_localization
      localizations[index].language_element.when_present.select data[:localization_language]
      localizations[index].release_name = data[:name]
      localizations[index].long_synopsis = data[:long_synopsis]
      localizations[index].short_synopsis = data[:short_synopsis]
    end

    select_lists(:release_language_id, class: "locale-language")
    text_field(:release_name_localization, name: "release[1][product_name]")
    text_areas(:long_synopsis_localization, class: ["textField", "film-textarea", "long-synopsis"])
    text_areas(:short_synopsis_localization, class: ["textField", "film-textarea", "short-synopsis"])
    div(:green_confirmation_message, class: "alertConfirm")
    div(:validation_messages, class: ["errormsgForRelease", "film-local-errorMsg"])

    def populate_first_localization(film_localization)
      release_language_id_elements[0].select(film_localization[:language])
      release_name_localization_element.value = film_localization[:name]
      long_synopsis_localization_elements[0].value = film_localization[:long_synopsis]
      short_synopsis_localization_elements[0].value = film_localization[:short_synopsis]
    end

    def check_localization_saved(film_localization)
      expect(release_name_localization_element.value).to eq film_localization[:name]
      expect(long_synopsis_localization_elements[0].value).to eq film_localization[:long_synopsis]
      expect(short_synopsis_localization_elements[0].value).to eq film_localization[:short_synopsis]
    end
  end
end
