Skip to main content

lib/rulestead_admin/components/audience_trace_components.ex

defmodule RulesteadAdmin.Components.AudienceTraceComponents do
  @moduledoc false

  use Phoenix.Component

  attr(:rule_traces, :list, default: [])

  def audience_trace_steps(assigns) do
    ~H"""
    <section :if={@rule_traces != []} class="rs-card rs-audience-trace" aria-label="Audience trace steps">
      <h3>Audience targeting</h3>
      <p class="rs-audience-trace__summary">
        Reusable audience trace preserves missing, archived, matched, and missed states from the simulation snapshot.
      </p>
      <ul>
        <li :for={trace <- @rule_traces}>
          <strong><%= trace.rule_key %></strong>
          <span :if={audience_trace = Map.get(trace, :audience_trace)}>
            — audience <code><%= audience_trace.audience_key %></code>:
            <span>Audience trace state: <%= audience_status(audience_trace) %></span>
          </span>
          <span :if={is_nil(Map.get(trace, :audience_trace))}> — no reusable audience on this rule</span>
        </li>
      </ul>
    </section>
    """
  end

  defp audience_status(%{matched?: true, reason: :matched}), do: "matched"
  defp audience_status(%{matched?: false, reason: :missed}), do: "missed"
  defp audience_status(%{reason: :missing}), do: "missing from snapshot"
  defp audience_status(%{reason: :archived}), do: "archived"
  defp audience_status(_), do: "unknown"
end