defmodule Mv.ConfigVereinfachtTest do
  @moduledoc """
  Tests for Mv.Config Vereinfacht-related helpers.
  """
  use Mv.DataCase, async: false

  describe "vereinfacht_env_configured?/0" do
    test "returns false when no Vereinfacht ENV variables are set" do
      clear_vereinfacht_env()
      refute Mv.Config.vereinfacht_env_configured?()
    end

    test "returns true when VEREINFACHT_API_URL is set" do
      set_vereinfacht_env("VEREINFACHT_API_URL", "https://api.example.com")
      assert Mv.Config.vereinfacht_env_configured?()
    after
      clear_vereinfacht_env()
    end

    test "returns true when VEREINFACHT_CLUB_ID is set" do
      set_vereinfacht_env("VEREINFACHT_CLUB_ID", "2")
      assert Mv.Config.vereinfacht_env_configured?()
    after
      clear_vereinfacht_env()
    end
  end

  describe "vereinfacht_configured?/0" do
    test "returns false when no config is set" do
      clear_vereinfacht_env()
      # Settings may have nil for vereinfacht fields
      refute Mv.Config.vereinfacht_configured?()
    end
  end

  describe "vereinfacht_contact_view_url/1" do
    test "returns nil when API URL is not configured" do
      clear_vereinfacht_env()
      assert Mv.Config.vereinfacht_contact_view_url("123") == nil
    end

    test "returns app contact view URL when API URL is set (derived app URL)" do
      clear_vereinfacht_env()
      clear_vereinfacht_app_url_from_settings()
      set_vereinfacht_env("VEREINFACHT_API_URL", "https://api.example.com/api/v1")

      assert Mv.Config.vereinfacht_contact_view_url("42") ==
               "https://app.example.com/en/admin/finances/contacts/42"
    after
      clear_vereinfacht_env()
    end

    test "returns app contact view URL when VEREINFACHT_APP_URL is set" do
      set_vereinfacht_env("VEREINFACHT_APP_URL", "https://app.verein.visuel.dev")

      assert Mv.Config.vereinfacht_contact_view_url("abc") ==
               "https://app.verein.visuel.dev/en/admin/finances/contacts/abc"
    after
      clear_vereinfacht_env()
    end
  end

  defp set_vereinfacht_env(key, value) do
    System.put_env(key, value)
  end

  defp clear_vereinfacht_env do
    System.delete_env("VEREINFACHT_API_URL")
    System.delete_env("VEREINFACHT_API_KEY")
    System.delete_env("VEREINFACHT_CLUB_ID")
    System.delete_env("VEREINFACHT_APP_URL")
  end

  defp clear_vereinfacht_app_url_from_settings do
    case Mv.Membership.get_settings() do
      {:ok, settings} ->
        Mv.Membership.update_settings(settings, %{vereinfacht_app_url: nil})

      _ ->
        :ok
    end
  end
end
