<PhoenixKitWeb.Components.LayoutWrapper.app_layout
  flash={@flash}
  phoenix_kit_current_scope={assigns[:phoenix_kit_current_scope]}
  page_title="Activity"
  current_path={@url_path}
  project_title={@project_title}
  current_locale={assigns[:current_locale]}
>
  <div class="container flex flex-col mx-auto px-4 py-6">
    <.admin_page_header
      back={Routes.path("/admin")}
      title="Activity"
      subtitle="Business-level activity across the platform"
    />

    <%!-- Activity List --%>
    <.table_default
      id="activity-table"
      variant="zebra"
      size="sm"
      class="w-full"
      toggleable={true}
      items={@entries}
      card_title={fn entry -> entry.action end}
      card_fields={
        fn entry ->
          fields = [
            %{
              label: "Actor",
              value: if(entry.actor, do: entry.actor.email, else: "System")
            }
          ]

          fields =
            if entry.resource_type do
              fields ++ [%{label: "Subject", value: entry.resource_type}]
            else
              fields
            end

          fields =
            if entry.target do
              fields ++ [%{label: "Target", value: entry.target.email}]
            else
              fields
            end

          fields =
            if entry.metadata["role"] do
              fields ++ [%{label: "Role", value: entry.metadata["role"]}]
            else
              fields
            end

          fields ++
            [
              %{
                label: "Date",
                value:
                  "#{Calendar.strftime(entry.inserted_at, "%b %d, %Y %H:%M")} (#{format_time_ago(entry.inserted_at)})"
              }
            ]
        end
      }
    >
      <:toolbar_title>
        <.form for={%{}} phx-change="filter" class="flex flex-wrap items-center gap-2">
          <span class="text-sm text-base-content/70 whitespace-nowrap">Module:</span>
          <select name="filter[module]" class="select select-sm w-36 min-w-0">
            <option value="">All Modules</option>
            <%= for mod <- @modules do %>
              <option value={mod} selected={@filter_module == mod}>
                {String.capitalize(mod)}
              </option>
            <% end %>
          </select>
          <span class="text-sm text-base-content/70 whitespace-nowrap">Mode:</span>
          <select name="filter[mode]" class="select select-sm w-32 min-w-0">
            <option value="">All Modes</option>
            <%= for mode <- @modes do %>
              <option value={mode} selected={@filter_mode == mode}>
                {String.capitalize(mode)}
              </option>
            <% end %>
          </select>
          <span class="text-sm text-base-content/70 whitespace-nowrap">Action:</span>
          <select name="filter[action]" class="select select-sm w-40 min-w-0">
            <option value="">All Actions</option>
            <%= for action <- @action_types do %>
              <option value={action} selected={@filter_action == action}>
                {action}
              </option>
            <% end %>
          </select>
          <span class="text-sm text-base-content/70 whitespace-nowrap">Type:</span>
          <select name="filter[resource_type]" class="select select-sm w-36 min-w-0">
            <option value="">All Types</option>
            <%= for rt <- @resource_types do %>
              <option value={rt} selected={@filter_resource_type == rt}>
                {String.capitalize(rt)}
              </option>
            <% end %>
          </select>
        </.form>
      </:toolbar_title>
      <:toolbar_actions>
        <span class="text-sm text-base-content/60 whitespace-nowrap">
          {@total} activities
        </span>
        <%= if any_filter_active?(assigns) do %>
          <button type="button" phx-click="clear_filters" class="btn btn-sm btn-outline">
            <.icon name="hero-x-mark" class="w-4 h-4" /> Clear filters
          </button>
        <% end %>
      </:toolbar_actions>
      <:card_header :let={entry}>
        <span class={"badge badge-sm #{action_badge_color(entry.action)}"}>
          {entry.action}
        </span>
      </:card_header>

      <:card_actions :let={entry}>
        <.link
          navigate={Routes.path("/admin/activity/#{entry.uuid}")}
          class="btn btn-sm btn-outline btn-info"
        >
          <.icon name="hero-arrow-top-right-on-square" class="w-4 h-4" /> View
        </.link>
      </:card_actions>

      <.table_default_header>
        <.table_default_row hover={false}>
          <.table_default_header_cell>Module</.table_default_header_cell>
          <.table_default_header_cell>Mode</.table_default_header_cell>
          <.table_default_header_cell>Activity</.table_default_header_cell>
          <.table_default_header_cell>Actor</.table_default_header_cell>
          <.table_default_header_cell>Details</.table_default_header_cell>
          <.table_default_header_cell>Subject</.table_default_header_cell>
          <.table_default_header_cell>Date</.table_default_header_cell>
          <.table_default_header_cell class="w-12"></.table_default_header_cell>
        </.table_default_row>
      </.table_default_header>

      <.table_default_body>
        <%= if Enum.empty?(@entries) do %>
          <.table_default_row>
            <.table_default_cell colspan={8}>
              <div class="text-center py-12 text-base-content/60">
                <.icon name="hero-bell-slash" class="w-12 h-12 mx-auto mb-2 opacity-50" />
                <%= if any_filter_active?(assigns) do %>
                  <p>No activities match the current filters</p>
                  <button
                    type="button"
                    phx-click="clear_filters"
                    class="btn btn-sm btn-outline mt-3"
                  >
                    <.icon name="hero-x-mark" class="w-4 h-4" /> Clear filters
                  </button>
                <% else %>
                  <p>No activities recorded yet</p>
                <% end %>
              </div>
            </.table_default_cell>
          </.table_default_row>
        <% end %>
        <%= for entry <- @entries do %>
          <.table_default_row>
            <.table_default_cell class="text-sm">
              <%= if entry.module do %>
                <span class="badge badge-outline badge-xs">{entry.module}</span>
              <% else %>
                <span class="text-base-content/30">—</span>
              <% end %>
            </.table_default_cell>
            <.table_default_cell class="text-sm">
              <%= if entry.mode do %>
                <span class={"badge badge-xs #{mode_badge_color(entry.mode)}"}>
                  {entry.mode}
                </span>
              <% else %>
                <span class="text-base-content/30">—</span>
              <% end %>
            </.table_default_cell>
            <.table_default_cell>
              <span class={"badge badge-sm #{action_badge_color(entry.action)}"}>
                {entry.action}
              </span>
            </.table_default_cell>
            <.table_default_cell class="text-sm">
              <%= if entry.actor do %>
                <span class="font-semibold">{entry.actor.email}</span>
                <%= if entry.metadata["actor_role"] do %>
                  <span class={[
                    "badge badge-xs ml-1",
                    if(entry.metadata["actor_role"] == "admin",
                      do: "badge-warning",
                      else: "badge-ghost"
                    )
                  ]}>
                    {entry.metadata["actor_role"]}
                  </span>
                <% end %>
              <% else %>
                <span class="text-base-content/50">System</span>
              <% end %>
            </.table_default_cell>
            <.table_default_cell class="text-xs text-base-content/60">
              <%= if entry.target && entry.target_uuid != entry.resource_uuid do %>
                <div class="mb-0.5">
                  <span class="text-base-content/50">&rarr;</span>
                  <span>{entry.target.email}</span>
                </div>
              <% end %>
              <% summary = summarize_details(entry.metadata) %>
              <%= if summary do %>
                <span>{summary}</span>
              <% else %>
                <span class="text-base-content/30">—</span>
              <% end %>
            </.table_default_cell>
            <.table_default_cell>
              <%= if entry.resource_type do %>
                <span class="badge badge-ghost badge-xs">{entry.resource_type}</span>
                <%= case Map.get(@resource_users, entry.resource_uuid) do %>
                  <% %{email: email} -> %>
                    <span class="text-xs ml-1">{email}</span>
                  <% _ -> %>
                    <%= if entry.resource_uuid do %>
                      <span class="text-xs text-base-content/40 ml-1">
                        {String.slice(to_string(entry.resource_uuid), 0..7)}
                      </span>
                    <% end %>
                <% end %>
              <% else %>
                <span class="text-base-content/30">—</span>
              <% end %>
            </.table_default_cell>
            <.table_default_cell class="text-xs text-base-content/60">
              <div>{Calendar.strftime(entry.inserted_at, "%b %d, %Y")}</div>
              <div class="text-base-content/40">
                {Calendar.strftime(entry.inserted_at, "%H:%M:%S")}
              </div>
            </.table_default_cell>
            <.table_default_cell>
              <.link
                navigate={Routes.path("/admin/activity/#{entry.uuid}")}
                class="btn btn-ghost btn-xs btn-square"
                title="View details"
              >
                <.icon name="hero-arrow-top-right-on-square" class="w-4 h-4" />
              </.link>
            </.table_default_cell>
          </.table_default_row>
        <% end %>
      </.table_default_body>
    </.table_default>

    <%!-- Pagination --%>
    <%= if @total_pages > 1 do %>
      <div class="flex justify-center mt-6">
        <div class="join">
          <%= for page <- max(1, @page - 2)..min(@total_pages, @page + 2) do %>
            <.link
              patch={
                Routes.path(
                  "/admin/activity?#{URI.encode_query(Enum.reject([{"page", page}, {"module", @filter_module}, {"mode", @filter_mode}, {"action", @filter_action}, {"resource_type", @filter_resource_type}], fn {_k, v} -> is_nil(v) or v == "" end))}"
                )
              }
              class={["join-item btn btn-sm", if(page == @page, do: "btn-active", else: "")]}
            >
              {page}
            </.link>
          <% end %>
        </div>
      </div>
    <% end %>
  </div>
</PhoenixKitWeb.Components.LayoutWrapper.app_layout>
