defmodule CMSWeb.AdminAuth do
  @moduledoc false
  use CMSWeb, :verified_routes

  import Phoenix.Controller
  import Plug.Conn

  def log_in_admin(conn) do
    conn
    |> renew_session()
    |> put_session(:admin?, true)
    |> redirect(to: ~p"/")
  end

  def log_out_admin(conn) do
    if live_socket_id = get_session(conn, :live_socket_id) do
      CMSWeb.Endpoint.broadcast(live_socket_id, "disconnect", %{})
    end

    conn
    |> renew_session()
    |> redirect(to: ~p"/")
  end

  def correct_password?(password) do
    password_hash = Application.fetch_env!(:cms, :password_hash)

    Argon2.verify_pass(password, password_hash)
  end

  ## private

  defp renew_session(conn) do
    delete_csrf_token()

    conn
    |> configure_session(renew: true)
    |> clear_session()
  end
end