<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={"#{@total} total activities"}
    />

    <%!-- Filters --%>
    <div class="bg-base-200 rounded-lg p-4 mb-6">
      <.form for={%{}} phx-change="filter" class="flex flex-wrap gap-4 items-end">
        <div class="form-control">
          <label class="label"><span class="label-text">Module</span></label>
          <select name="filter[module]" class="select select-bordered select-sm">
            <option value="">All Modules</option>
            <%= for mod <- @modules do %>
              <option value={mod} selected={@filter_module == mod}>
                {String.capitalize(mod)}
              </option>
            <% end %>
          </select>
        </div>

        <div class="form-control">
          <label class="label"><span class="label-text">Mode</span></label>
          <select name="filter[mode]" class="select select-bordered select-sm">
            <option value="">All Modes</option>
            <%= for mode <- @modes do %>
              <option value={mode} selected={@filter_mode == mode}>
                {String.capitalize(mode)}
              </option>
            <% end %>
          </select>
        </div>

        <div class="form-control">
          <label class="label"><span class="label-text">Action</span></label>
          <select name="filter[action]" class="select select-bordered select-sm">
            <option value="">All Actions</option>
            <%= for action <- @action_types do %>
              <option value={action} selected={@filter_action == action}>
                {action}
              </option>
            <% end %>
          </select>
        </div>

        <div class="form-control">
          <label class="label"><span class="label-text">Resource Type</span></label>
          <select name="filter[resource_type]" class="select select-bordered select-sm">
            <option value="">All Types</option>
            <%= for rt <- @resource_types do %>
              <option value={rt} selected={@filter_resource_type == rt}>
                {String.capitalize(rt)}
              </option>
            <% end %>
          </select>
        </div>

        <button type="button" phx-click="clear_filters" class="btn btn-ghost btn-sm">
          Clear
        </button>
      </.form>
    </div>

    <%!-- Activity List --%>
    <%= if Enum.empty?(@entries) do %>
      <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" />
        <p>No activities recorded yet</p>
      </div>
    <% else %>
      <.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
        }
      >
        <: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>
          <%= 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>
    <% end %>

    <%!-- 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>
