lib/active_campaign/tracking/event.ex

defmodule ActiveCampaign.Tracking.Event do
  @moduledoc """
  Documentation for `ActiveCampaign.Tracking.Event`.
  """

  alias ActiveCampaign.Http

  # TODO endpoint is https://trackcmp.net/event ?
  # @doc """
  # Track event
  # """
  # @spec track() :: {:ok, map()} | {:error, any()}
  # def track() do
  #   Http.post("")
  # end

  @doc """
  Create a new event (name only)
  """
  @spec create(String.t()) :: {:ok, map()} | {:error, any()}
  def create(name) do
    Http.post("eventTrackingEvents", %{eventTrackingEvent: %{name: name}})
  end

  @doc """
  Retrieve Event Tracking Status
  """
  @spec get_status :: {:ok, map()} | {:error, any()}
  def get_status do
    Http.get("eventTracking")
  end

  @doc """
  Enable/disable
  """
  @spec set_enabled(boolean()) :: {:ok, map()} | {:error, any()}
  def set_enabled(bool) do
    Http.put("eventTracking", %{eventTracking: %{enabled: bool}})
  end

  @doc """
  Delete event (name only)

  Spaces in the name should be left as spaces, they will automatically be encoded.
  """
  @spec delete(String.t()) :: {:ok, map()} | {:error, any()}
  def delete(name) do
    Http.delete("eventTrackingEvent/#{URI.encode(name)}")
  end

  @doc """
  List all events (names only)
  """
  @spec list(map()) :: {:ok, map()} | {:error, any()}
  def list(query_params \\ %{}) do
    Http.get("eventTrackingEvents?" <> Http.encode_query(query_params))
  end

  @doc """
  Get Contact's Tracking Logs/Events
  """
  @spec get_contact_tracking(integer()) :: {:ok, map()} | {:error, any()}
  def get_contact_tracking(contact_id) do
    Http.get("contacts/#{contact_id}/trackingLogs")
  end

  @doc """
  Get Contact By Event ID
  """
  @spec get_contact_by_event_id(integer()) :: {:ok, map()} | {:error, any()}
  def get_contact_by_event_id(event_id) do
    Http.get("trackingLogs/#{event_id}/contact")
  end
end