defmodule SpawnInitializer.K8s.K8sConn do
  @moduledoc """
  Initializes the %K8s.Conn{} struct depending on the mix environment.
  """

  @spec get!(env :: atom()) :: K8s.Conn.t()
  def get!(:dev) do
    {:ok, conn} =
      "KUBECONFIG"
      |> System.get_env("./test/integration/kubeconfig-dev.yaml")
      |> K8s.Conn.from_file(insecure_skip_tls_verify: true)

    conn
  end

  def get!(:test) do
    {:ok, conn} =
      "KUBECONFIG"
      |> System.get_env("./test/integration/kubeconfig-test.yaml")
      |> K8s.Conn.from_file(insecure_skip_tls_verify: true)

    conn
  end

  def get!(:prod) do
    kubeconfig = System.get_env("KUBECONFIG")

    {:ok, conn} =
      if not is_nil(kubeconfig) and File.exists?(kubeconfig) do
        K8s.Conn.from_file(kubeconfig, insecure_skip_tls_verify: true)
      else
        K8s.Conn.from_service_account(insecure_skip_tls_verify: true)
      end

    conn
  end

  def get(_) do
    K8s.Conn.from_service_account()
    |> then(fn
      {:ok, conn} -> conn
      other -> other
    end)
  end
end
