# frozen_string_literal: true

describe "Admin Site Texts Page", type: :system do
  fab!(:admin)

  let(:site_texts_page) { PageObjects::Pages::AdminSiteTexts.new }

  before { sign_in(admin) }

  after do
    TranslationOverride.delete_all
    I18n.reload!
  end

  it "can search for client text using the default locale" do
    site_texts_page.visit
    site_texts_page.search("skip to main content")
    expect(site_texts_page).to have_translation_key("js.skip_to_main_content")
    expect(site_texts_page).to have_translation_value(I18n.t("js.skip_to_main_content"))

    site_texts_page.visit
    site_texts_page.search("js.skip_to_main_content")
    expect(site_texts_page).to have_translation_key("js.skip_to_main_content")
    expect(site_texts_page).to have_translation_value(I18n.t("js.skip_to_main_content"))
  end

  it "can search for server text using the default locale" do
    site_texts_page.visit
    site_texts_page.search("Something went wrong updating theme")
    expect(site_texts_page).to have_translation_key("themes.other_error")
    expect(site_texts_page).to have_translation_value(I18n.t("themes.other_error"))

    site_texts_page.visit
    site_texts_page.search("themes.other_error")
    expect(site_texts_page).to have_translation_key("themes.other_error")
    expect(site_texts_page).to have_translation_value(I18n.t("themes.other_error"))
  end

  it "can search for text using the selected locale" do
    site_texts_page.visit
    site_texts_page.select_locale("it")
    site_texts_page.search("Passa al contenuto principale")
    expect(site_texts_page).to have_translation_key("js.skip_to_main_content")
    expect(site_texts_page).to have_translation_value(
      I18n.t("js.skip_to_main_content", locale: "it"),
    )

    site_texts_page.visit
    site_texts_page.select_locale("it")
    site_texts_page.search("js.skip_to_main_content")
    expect(site_texts_page).to have_translation_key("js.skip_to_main_content")
    expect(site_texts_page).to have_translation_value(
      I18n.t("js.skip_to_main_content", locale: "it"),
    )
  end

  it "can show only overridden translations" do
    site_texts_page.visit
    site_texts_page.search("skip")
    site_texts_page.toggle_only_show_overridden
    expect(page).to have_css(".site-text", count: 0)

    TranslationOverride.create!(
      locale: "en",
      translation_key: "js.skip_to_main_content",
      value: "Overridden skip text",
      original_translation: I18n.t("js.skip_to_main_content"),
    )
    I18n.reload!

    site_texts_page.visit
    site_texts_page.search("skip")
    site_texts_page.toggle_only_show_overridden
    expect(page).to have_css(".site-text", count: 1)
    expect(site_texts_page).to have_translation_key("js.skip_to_main_content")
  end

  it "can show only outddated translations" do
    site_texts_page.visit
    site_texts_page.search("skip")
    site_texts_page.toggle_only_show_outdated
    expect(page).to have_css(".site-text", count: 0)

    TranslationOverride.create!(
      locale: "en",
      translation_key: "js.skip_to_main_content",
      value: "Overridden skip text",
      original_translation: I18n.t("js.skip_to_main_content"),
      status: "outdated",
    )
    I18n.reload!

    site_texts_page.visit
    site_texts_page.search("skip")
    site_texts_page.toggle_only_show_outdated
    expect(page).to have_css(".site-text", count: 1)
    expect(site_texts_page).to have_translation_key("js.skip_to_main_content")
  end

  it "can show results in the selected locale" do
    site_texts_page.visit
    site_texts_page.search("skip to main content")
    expect(site_texts_page).to have_translation_key("js.skip_to_main_content")
    expect(site_texts_page).to have_translation_value(I18n.t("js.skip_to_main_content"))

    site_texts_page.toggle_only_show_results_in_selected_locale
    site_texts_page.select_locale("it")
    expect(site_texts_page).to have_translation_key("js.skip_to_main_content")
    expect(site_texts_page).to have_translation_value(
      I18n.t("js.skip_to_main_content", locale: "it"),
    )
  end

  it "can edit a translation string" do
    site_texts_page.visit
    site_texts_page.search("skip to main content")
    site_texts_page.edit_translation("js.skip_to_main_content")
    site_texts_page.override_translation("Some overridden value")
    site_texts_page.visit
    site_texts_page.search("js.skip_to_main_content")
    expect(site_texts_page).to have_translation_value("Some overridden value")
    expect(TranslationOverride.exists?(translation_key: "js.skip_to_main_content")).to eq(true)
  end

  it "properly display category names in replace text modal" do
    site_texts_page.visit
    site_texts_page.click_replace_text_button

    expect(page.all(".modal label span").map(&:text)).to eq(["Uncategorized"])
  end
end