defmodule ToweropsWeb.GettextHelpers do
  @moduledoc """
  Domain-specific helper functions for Gettext translations.

  Provides shorter syntax for common translation patterns:
  - `t/1` - Common UI elements (default domain)
  - `t_auth/1` - Authentication flows
  - `t_equipment/1` - Equipment/device management
  - `t_admin/1` - Admin features
  - `t_email/1` - Email templates

  Error messages use the standard `gettext/1` function.

  ## Examples

      # Common UI
      t("Save")
      t("Cancel")

      # Authentication
      t_auth("Log in")
      t_auth("Sign up")

      # Equipment
      t_equipment("Add Device")
      t_equipment("Last polled: %{time}", time: formatted_time)

      # Admin
      t_admin("Impersonate User")

      # Emails
      t_email("Reset password instructions")

      # Errors (use standard gettext)
      gettext("can't be blank")
  """

  use Gettext, backend: ToweropsWeb.Gettext

  @doc """
  Translates a string in the default domain.

  Used for common UI elements, navigation, generic actions.
  """
  defmacro t(msgid) do
    quote do
      dgettext("default", unquote(msgid))
    end
  end

  @doc """
  Translates a string with interpolation in the default domain.
  """
  defmacro t(msgid, bindings) do
    quote do
      dgettext("default", unquote(msgid), unquote(bindings))
    end
  end

  @doc """
  Translates a string in the auth domain.

  Used for authentication flows, user management, login/signup.
  """
  defmacro t_auth(msgid) do
    quote do
      dgettext("auth", unquote(msgid))
    end
  end

  @doc """
  Translates a string with interpolation in the auth domain.
  """
  defmacro t_auth(msgid, bindings) do
    quote do
      dgettext("auth", unquote(msgid), unquote(bindings))
    end
  end

  @doc """
  Translates a string in the equipment domain.

  Used for equipment/device management, SNMP, monitoring, alerts.
  """
  defmacro t_equipment(msgid) do
    quote do
      dgettext("equipment", unquote(msgid))
    end
  end

  @doc """
  Translates a string with interpolation in the equipment domain.
  """
  defmacro t_equipment(msgid, bindings) do
    quote do
      dgettext("equipment", unquote(msgid), unquote(bindings))
    end
  end

  @doc """
  Translates a string in the admin domain.

  Used for admin-specific features like impersonation, GeoIP, audit logs.
  """
  defmacro t_admin(msgid) do
    quote do
      dgettext("admin", unquote(msgid))
    end
  end

  @doc """
  Translates a string with interpolation in the admin domain.
  """
  defmacro t_admin(msgid, bindings) do
    quote do
      dgettext("admin", unquote(msgid), unquote(bindings))
    end
  end

  @doc """
  Translates a string in the emails domain.

  Used for email templates and subjects.
  """
  defmacro t_email(msgid) do
    quote do
      dgettext("emails", unquote(msgid))
    end
  end

  @doc """
  Translates a string with interpolation in the emails domain.
  """
  defmacro t_email(msgid, bindings) do
    quote do
      dgettext("emails", unquote(msgid), unquote(bindings))
    end
  end
end
