<PhoenixKitWeb.Components.LayoutWrapper.app_layout
  socket={@socket}
  flash={@flash}
  phoenix_kit_current_scope={assigns[:phoenix_kit_current_scope]}
  page_title={@page_title}
  page_subtitle={gettext("Manage user accounts and roles")}
  current_path={@url_path}
  project_title={@project_title}
  current_locale={@current_locale}
>
  <div class="flex flex-col w-full p-4">
    <%!-- Role Management Modal --%>
    <%= if @show_role_modal && @managing_user do %>
      <div class="modal modal-open">
        <div class="modal-box max-w-2xl">
          <h3 class="font-bold text-xl mb-4">
            Manage Roles for {@managing_user.email}
          </h3>

          <form phx-submit="sync_user_roles" class="space-y-4">
            <div class="space-y-2">
              <%= for role <- @all_roles do %>
                <% owner_role? = role.name == PhoenixKit.Users.Role.system_roles().owner %>
                <div class="form-control">
                  <label
                    class={[
                      "label justify-start gap-3",
                      owner_role? && "cursor-not-allowed opacity-70"
                    ]}
                    title={
                      if owner_role?, do: gettext("Owner role cannot be modified"), else: nil
                    }
                  >
                    <input
                      type="checkbox"
                      name={"roles[#{role.name}]"}
                      value={role.name}
                      class="checkbox"
                      checked={role.name in @user_roles}
                      disabled={owner_role?}
                    />
                    <div class="flex flex-wrap items-center gap-2">
                      <.role_badge role={role} size={:sm} />
                      <%= if role.is_system_role do %>
                        <span class="badge badge-outline badge-xs h-auto">
                          {gettext("System")}
                        </span>
                      <% end %>
                      <%= if role.description do %>
                        <span class="text-sm text-base-content/70">- {role.description}</span>
                      <% end %>
                    </div>
                  </label>
                </div>
              <% end %>
            </div>

            <%= if Enum.empty?(@all_roles) do %>
              <div class="text-center py-8 text-base-content/70">
                <p>{gettext("No roles available. Create roles first in Role Management.")}</p>
              </div>
            <% end %>

            <div class="modal-action">
              <button type="submit" class="btn btn-primary">
                {gettext("Update Roles")}
              </button>
              <button type="button" phx-click="hide_role_management" class="btn btn-outline">
                {gettext("Cancel")}
              </button>
            </div>
          </form>
        </div>
      </div>
    <% end %>

    <%!-- Users Table --%>
    <div class="bg-base-100">
      <.table_default
        id="users-table"
        variant="zebra"
        class="w-full table-fixed md:table-auto"
        toggleable={true}
        show_toggle={false}
        view_mode={@view_mode}
        view_event="set_view_mode"
        items={@users}
        card_title={fn user -> user.email end}
        card_fields={
          fn user ->
            build_card_fields(
              user,
              @selected_columns,
              @phoenix_kit_current_user,
              @date_time_settings,
              @geolocation_tracking_enabled
            )
          end
        }
      >
        <:toolbar_title>
          <%!-- View + filter controls live on the left (matches the media browser).
               The slot is a plain block, so wrap them in a flex row for gap. --%>
          <div class="flex flex-wrap items-center gap-2">
            <%!-- Display (grid/list) — media-style dropdown --%>
            <% display_options = [
              {"card", gettext("Grid"), "hero-squares-2x2"},
              {"table", gettext("List"), "hero-bars-3-bottom-left"}
            ] %>
            <div class="dropdown">
              <div tabindex="0" role="button" class="btn btn-sm gap-2">
                <.icon
                  name={
                    if @view_mode == "table",
                      do: "hero-bars-3-bottom-left",
                      else: "hero-squares-2x2"
                  }
                  class="w-4 h-4"
                />
                <span class="hidden sm:inline">
                  {if @view_mode == "table", do: gettext("List"), else: gettext("Grid")}
                </span>
                <.icon
                  name="hero-chevron-down"
                  class="hidden sm:inline-block w-3.5 h-3.5 opacity-60"
                />
              </div>
              <ul
                tabindex="0"
                onclick="document.activeElement.blur()"
                class="dropdown-content menu bg-base-100 rounded-box z-20 w-44 p-2 shadow border border-base-200"
              >
                <%= for {val, label, icon} <- display_options do %>
                  <li>
                    <button
                      phx-click="set_view_mode"
                      phx-value-mode={val}
                      class={@view_mode == val && "active"}
                    >
                      <.icon name={icon} class="w-4 h-4" /> {label}
                    </button>
                  </li>
                <% end %>
              </ul>
            </div>
            <%!-- Role Filter (media-style dropdown) --%>
            <% role_options = [
              {"all", gettext("All Users")},
              {"Owner", gettext("Owners Only")},
              {"Admin", gettext("Admins Only")},
              {"User", gettext("Regular Users")}
            ] %>
            <% role_label =
              role_options
              |> Enum.find(fn {v, _} -> v == @filter_role end)
              |> then(&(&1 && elem(&1, 1))) %>
            <div class="dropdown">
              <div
                tabindex="0"
                role="button"
                class={["btn btn-sm gap-2", @filter_role != "all" && "btn-active"]}
              >
                <.icon name="hero-user-group" class="w-4 h-4" />
                <%!-- Show the active role on mobile too (only "All Users" collapses
                     to the bare icon) so the current filter is always legible. --%>
                <span class={["sm:inline", @filter_role == "all" && "hidden"]}>
                  {role_label || gettext("Role")}
                </span>
                <.icon
                  name="hero-chevron-down"
                  class="hidden sm:inline-block w-3.5 h-3.5 opacity-60"
                />
              </div>
              <ul
                tabindex="0"
                onclick="document.activeElement.blur()"
                class="dropdown-content menu bg-base-100 rounded-box z-20 w-44 p-2 shadow border border-base-200"
              >
                <%= for {val, label} <- role_options do %>
                  <li>
                    <button
                      phx-click="filter_by_role"
                      phx-value-role={val}
                      class={@filter_role == val && "active"}
                    >
                      {label}
                    </button>
                  </li>
                <% end %>
              </ul>
            </div>
            <%!-- Account Type Filter (media-style dropdown) --%>
            <%= if @org_accounts_enabled do %>
              <% account_type_options = [
                {"all", gettext("All Types")},
                {"person", gettext("Person")},
                {"organization", gettext("Organization")}
              ] %>
              <% account_type_label =
                account_type_options
                |> Enum.find(fn {v, _} -> v == @filter_account_type end)
                |> then(&(&1 && elem(&1, 1))) %>
              <div class="dropdown">
                <div
                  tabindex="0"
                  role="button"
                  class={["btn btn-sm gap-2", @filter_account_type != "all" && "btn-active"]}
                >
                  <.icon name="hero-identification" class="w-4 h-4" />
                  <span class={["sm:inline", @filter_account_type == "all" && "hidden"]}>
                    {account_type_label || gettext("Account type")}
                  </span>
                  <.icon
                    name="hero-chevron-down"
                    class="hidden sm:inline-block w-3.5 h-3.5 opacity-60"
                  />
                </div>
                <ul
                  tabindex="0"
                  onclick="document.activeElement.blur()"
                  class="dropdown-content menu bg-base-100 rounded-box z-20 w-44 p-2 shadow border border-base-200"
                >
                  <%= for {val, label} <- account_type_options do %>
                    <li>
                      <button
                        phx-click="filter_by_account_type"
                        phx-value-account_type={val}
                        class={@filter_account_type == val && "active"}
                      >
                        {label}
                      </button>
                    </li>
                  <% end %>
                </ul>
              </div>
            <% end %>
          </div>
        </:toolbar_title>
        <:sort_bar :if={@show_search or @search_query != ""}>
          <form phx-change="search" phx-submit="search">
            <label class="input input-sm input-bordered flex items-center gap-2 w-full">
              <.icon name="hero-magnifying-glass" class="h-4 w-4 opacity-50 shrink-0" />
              <input
                id="users-search-input"
                type="text"
                name="search"
                value={@search_query}
                placeholder={gettext("Search by email, username, or name...")}
                class="grow min-w-0"
                phx-debounce="300"
                autocomplete="off"
                phx-mounted={Phoenix.LiveView.JS.focus()}
                phx-blur="close_search_if_empty"
              />
              <button
                type="button"
                phx-click="clear_search"
                class="btn btn-ghost btn-xs btn-circle shrink-0"
                title={gettext("Close search")}
              >
                <.icon name="hero-x-mark" class="h-3.5 w-3.5" />
              </button>
            </label>
          </form>
        </:sort_bar>
        <:toolbar_actions>
          <%!-- Search (collapsed magnifier opens the row below) + actions on the
               right, mirroring the media browser. --%>
          <button
            type="button"
            phx-click="toggle_search"
            class={[
              "btn btn-sm btn-circle btn-ghost",
              (@show_search or @search_query != "") && "btn-active"
            ]}
            title={gettext("Search")}
          >
            <.icon name="hero-magnifying-glass" class="h-4 w-4" />
          </button>
          <button
            class="btn btn-sm btn-info"
            phx-click="show_column_modal"
            title="Customize columns"
          >
            <.icon name="hero-view-columns" class="h-4 w-4" />
          </button>
          <.link
            navigate={PhoenixKit.Utils.Routes.path("/admin/users/new")}
            class="btn btn-sm btn-primary"
            title={gettext("Add New User")}
          >
            <PhoenixKitWeb.Components.Core.Icons.icon_user_add class="h-4 w-4" />
            <span class="hidden lg:inline">{gettext("Add New User")}</span>
          </.link>
        </:toolbar_actions>
        <:card_header :let={user}>
          <div class="flex items-center gap-3 min-w-0">
            <.user_avatar user={user} size="sm" />
            <div class="flex flex-col gap-0.5 min-w-0">
              <div class="flex items-center gap-2 min-w-0">
                <span class="font-medium text-sm truncate min-w-0">{user.email}</span>
                <%= if user.uuid == @phoenix_kit_current_user.uuid do %>
                  <span class="badge badge-info badge-xs h-auto shrink-0">{gettext("you")}</span>
                <% end %>
              </div>
              <% full_name = User.full_name(user) %>
              <%= if full_name && full_name != "" do %>
                <span class="text-sm text-base-content/60 truncate">{full_name}</span>
              <% end %>
              <%= if user.username do %>
                <div class="text-xs text-base-content/50 truncate">@{user.username}</div>
              <% end %>
            </div>
          </div>
        </:card_header>
        <.table_default_header>
          <.table_default_row>
            <%= for column_id <- @selected_columns do %>
              <%= if should_render_column?(column_id) do %>
                <%!-- On mobile only the email + actions columns show; the rest
                     collapse (hidden md:table-cell), mirroring the media list. --%>
                <.table_default_header_cell class={mobile_col_class(column_id)}>
                  {render_column_header(column_id)}
                </.table_default_header_cell>
              <% end %>
            <% end %>
          </.table_default_row>
        </.table_default_header>

        <.table_default_body>
          <%= if @users == [] do %>
            <.table_default_row>
              <.table_default_cell colspan={
                Enum.count(@selected_columns, &should_render_column?/1)
              }>
                <div class="text-center py-12">
                  <PhoenixKitWeb.Components.Core.Icons.icon_users_multiple class="h-16 w-16 mx-auto text-base-content/40 mb-4" />
                  <h3 class="text-lg font-medium text-base-content mb-2">
                    {gettext("No users found")}
                  </h3>
                  <% filters_active? =
                    @search_query != "" or @filter_role != "all" or
                      @filter_account_type != "all" %>
                  <p class="text-base-content/70 mb-4">
                    <%= if filters_active? do %>
                      {gettext("Try adjusting your search or filter criteria.")}
                    <% else %>
                      {gettext("No users are registered yet.")}
                    <% end %>
                  </p>
                  <%= if filters_active? do %>
                    <button class="btn btn-outline btn-sm" phx-click="clear_filters">
                      {gettext("Clear Filters")}
                    </button>
                  <% end %>
                </div>
              </.table_default_cell>
            </.table_default_row>
          <% else %>
            <%= for user <- @users do %>
              <.table_default_row>
                <%= for column_id <- @selected_columns do %>
                  <%= if should_render_column?(column_id) do %>
                    <.table_default_cell class={mobile_col_class(column_id)}>
                      <%= cond do %>
                        <% column_id == "email" -> %>
                          <.link
                            navigate={
                              PhoenixKit.Utils.Routes.path("/admin/users/view/#{user.uuid}")
                            }
                            class="flex items-center gap-3 hover:opacity-80 transition-opacity"
                          >
                            <.user_avatar user={user} size="sm" />
                            <div class="flex flex-col gap-1 min-w-0 max-w-[18rem]">
                              <div class="flex items-center gap-2 min-w-0">
                                <span
                                  class="font-medium link link-hover truncate min-w-0"
                                  title={user.email}
                                >
                                  {user.email}
                                </span>
                                <%= if user.uuid == @phoenix_kit_current_user.uuid do %>
                                  <span class="badge badge-info badge-xs h-auto shrink-0">
                                    {gettext("you")}
                                  </span>
                                <% end %>
                                <%= if @org_accounts_enabled && user.account_type == "organization" do %>
                                  <span class="badge badge-primary badge-xs h-auto shrink-0">
                                    {gettext("Org")}
                                  </span>
                                <% end %>
                              </div>
                              <%= if user.username do %>
                                <div
                                  class="text-sm text-base-content/60 truncate"
                                  title={"@#{user.username}"}
                                >
                                  @{user.username}
                                </div>
                              <% end %>
                              <%!-- Name shown inline on mobile only, since the
                                   full_name column is hidden there. --%>
                              <% mobile_full_name = User.full_name(user) %>
                              <%= if mobile_full_name && mobile_full_name != "" do %>
                                <div
                                  class="md:hidden text-sm text-base-content/60 truncate"
                                  title={mobile_full_name}
                                >
                                  {mobile_full_name}
                                </div>
                              <% end %>
                            </div>
                          </.link>
                        <% column_id == "full_name" -> %>
                          <div class="flex flex-col gap-1 min-w-0 max-w-[18rem]">
                            <%= if user.first_name || user.last_name || user.organization_name do %>
                              <% full_name = PhoenixKit.Users.Auth.User.full_name(user) %>
                              <div class="truncate" title={full_name}>{full_name}</div>
                            <% else %>
                              <div class="text-base-content/50">-</div>
                            <% end %>
                            <%= if @org_accounts_enabled && user.organization do %>
                              <div
                                class="text-xs text-base-content/60 truncate"
                                title={user.organization.organization_name}
                              >
                                {user.organization.organization_name}
                              </div>
                            <% end %>
                          </div>
                        <% column_id == "role" -> %>
                          <% user_roles = get_user_roles(user) %>
                          <div class="flex flex-wrap gap-1">
                            <%= for role_name <- user_roles do %>
                              <.role_badge
                                role={%{name: role_name, is_system_role: false}}
                                size={:sm}
                              />
                            <% end %>
                            <%= if Enum.empty?(user_roles) do %>
                              <span class="badge badge-ghost badge-sm h-auto">
                                {gettext("No roles")}
                              </span>
                            <% end %>
                          </div>
                        <% column_id == "status" -> %>
                          <div class="flex flex-col gap-1">
                            <%= if user.confirmed_at do %>
                              <span class="badge badge-success badge-sm h-auto">
                                {gettext("Email Confirmed")}
                              </span>
                            <% else %>
                              <span class="badge badge-warning badge-sm h-auto">
                                {gettext("Email Pending")}
                              </span>
                            <% end %>
                            <%= if user.is_active do %>
                              <span class="badge badge-outline badge-xs h-auto">
                                {gettext("Active")}
                              </span>
                            <% else %>
                              <span class="badge badge-error badge-xs h-auto">
                                {gettext("Inactive")}
                              </span>
                            <% end %>
                          </div>
                        <% column_id == "registered" -> %>
                          <div class="text-sm">
                            {UtilsDate.format_date_with_user_timezone_cached(
                              user.inserted_at,
                              @phoenix_kit_current_user,
                              @date_time_settings
                            )}
                          </div>
                        <% column_id == "location" -> %>
                          <div class="text-sm">
                            <div class="flex flex-col gap-1">
                              <%= cond do %>
                                <% !@geolocation_tracking_enabled -> %>
                                  <div
                                    class="tooltip tooltip-right"
                                    data-tip={
                                      gettext(
                                        "Location tracking is off, so no user shows a location. Turn it on in Settings > Users."
                                      )
                                    }
                                  >
                                    <.link
                                      navigate={
                                        PhoenixKit.Utils.Routes.path("/admin/settings/users")
                                      }
                                      class="inline-flex items-center gap-1 text-xs text-base-content/50 hover:text-primary hover:underline"
                                    >
                                      <.icon name="hero-information-circle" class="w-3.5 h-3.5" />
                                      {gettext("Tracking disabled")}
                                    </.link>
                                  </div>
                                <% user.registration_country || user.registration_region || user.registration_city || user.registration_ip -> %>
                                  <%= if user.registration_country do %>
                                    <div class="flex items-center gap-1">
                                      <span class="badge badge-outline badge-xs h-auto">
                                        {user.registration_country}
                                      </span>
                                    </div>
                                  <% end %>
                                  <%= if user.registration_region || user.registration_city do %>
                                    <div class="text-xs text-base-content/70">
                                      <%= if user.registration_region && user.registration_city do %>
                                        {user.registration_region}, {user.registration_city}
                                      <% else %>
                                        {user.registration_region || user.registration_city}
                                      <% end %>
                                    </div>
                                  <% end %>
                                  <%= if user.registration_ip do %>
                                    <div class="text-xs text-base-content/50 font-mono">
                                      {user.registration_ip}
                                    </div>
                                  <% end %>
                                <% true -> %>
                                  <div class="text-xs text-base-content/50">
                                    {gettext("No data")}
                                  </div>
                              <% end %>
                            </div>
                          </div>
                        <% column_id == "last_confirmed" -> %>
                          <div class="text-sm">
                            <%= if user.confirmed_at do %>
                              {UtilsDate.format_date_with_user_timezone_cached(
                                user.confirmed_at,
                                @phoenix_kit_current_user,
                                @date_time_settings
                              )}
                            <% else %>
                              {gettext("Never")}
                            <% end %>
                          </div>
                        <% column_id == "actions" -> %>
                          <.table_row_menu
                            id={"user-menu-#{user.uuid}"}
                            label={gettext("User actions")}
                          >
                            <%!-- View --%>
                            <.table_row_menu_link
                              navigate={
                                PhoenixKit.Utils.Routes.path("/admin/users/view/#{user.uuid}")
                              }
                              icon="hero-eye"
                              label={gettext("View")}
                            />
                            <%!-- Edit --%>
                            <.table_row_menu_link
                              navigate={
                                PhoenixKit.Utils.Routes.path(
                                  "/admin/users/edit/#{user.uuid}?return_to=list"
                                )
                              }
                              icon="hero-pencil"
                              label={gettext("Edit")}
                              variant="secondary"
                            />
                            <%!-- Role Management --%>
                            <%= if user.uuid != @phoenix_kit_current_user.uuid do %>
                              <.table_row_menu_button
                                phx-click="show_role_management"
                                phx-value-user_uuid={user.uuid}
                                icon="hero-user-group"
                                label={gettext("Roles")}
                                variant="primary"
                              />
                            <% end %>
                            <%!-- Current user: Settings --%>
                            <%= if user.uuid == @phoenix_kit_current_user.uuid do %>
                              <.table_row_menu_link
                                navigate={PhoenixKit.Utils.Routes.path("/dashboard/settings")}
                                icon="hero-cog-6-tooth"
                                label={gettext("Settings")}
                                variant="info"
                              />
                            <% end %>
                            <%!-- Non-owner actions: confirmation, status, delete --%>
                            <%= if user.uuid != @phoenix_kit_current_user.uuid && get_primary_role_name_unsafe(user) != "Owner" do %>
                              <.table_row_menu_divider />
                              <.table_row_menu_button
                                phx-click="request_confirmation_toggle"
                                phx-value-user_uuid={user.uuid}
                                phx-value-is_confirmed={to_string(!!user.confirmed_at)}
                                icon={
                                  if user.confirmed_at,
                                    do: "hero-envelope-open",
                                    else: "hero-envelope"
                                }
                                label={
                                  if user.confirmed_at,
                                    do: gettext("Unconfirm Email"),
                                    else: gettext("Confirm Email")
                                }
                                variant={if user.confirmed_at, do: "success", else: "warning"}
                              />
                              <.table_row_menu_button
                                phx-click="request_status_toggle"
                                phx-value-user_uuid={user.uuid}
                                phx-value-is_active={to_string(user.is_active)}
                                icon={
                                  if user.is_active,
                                    do: "hero-check-circle",
                                    else: "hero-x-circle"
                                }
                                label={
                                  if user.is_active,
                                    do: gettext("Deactivate"),
                                    else: gettext("Activate")
                                }
                                variant={if user.is_active, do: "success", else: "warning"}
                              />
                              <%= if Auth.can_delete_user?(user, @phoenix_kit_current_user) do %>
                                <.table_row_menu_divider />
                                <.table_row_menu_button
                                  phx-click="request_delete_user"
                                  phx-value-user_uuid={user.uuid}
                                  data-confirm={
                                    gettext(
                                      "Are you sure you want to delete this user? This action cannot be undone."
                                    )
                                  }
                                  icon="hero-trash"
                                  label={gettext("Delete")}
                                  variant="error"
                                />
                              <% end %>
                            <% end %>
                          </.table_row_menu>
                        <% true -> %>
                          <%!-- Handle custom fields and other columns --%>
                          {render_column_cell(
                            user,
                            column_id,
                            @phoenix_kit_current_user,
                            @date_time_settings
                          )}
                      <% end %>
                    </.table_default_cell>
                  <% end %>
                <% end %>
              </.table_default_row>
            <% end %>
          <% end %>
        </.table_default_body>
        <:card_actions :let={user}>
          <.table_row_menu id={"user-card-menu-#{user.uuid}"} label={gettext("User actions")}>
            <.table_row_menu_link
              navigate={PhoenixKit.Utils.Routes.path("/admin/users/view/#{user.uuid}")}
              icon="hero-eye"
              label={gettext("View")}
            />
            <.table_row_menu_link
              navigate={
                PhoenixKit.Utils.Routes.path("/admin/users/edit/#{user.uuid}?return_to=list")
              }
              icon="hero-pencil"
              label={gettext("Edit")}
              variant="secondary"
            />
            <%= if user.uuid != @phoenix_kit_current_user.uuid do %>
              <.table_row_menu_button
                phx-click="show_role_management"
                phx-value-user_uuid={user.uuid}
                icon="hero-user-group"
                label={gettext("Roles")}
                variant="primary"
              />
            <% end %>
            <%= if user.uuid == @phoenix_kit_current_user.uuid do %>
              <.table_row_menu_link
                navigate={PhoenixKit.Utils.Routes.path("/dashboard/settings")}
                icon="hero-cog-6-tooth"
                label={gettext("Settings")}
                variant="info"
              />
            <% end %>
            <%= if user.uuid != @phoenix_kit_current_user.uuid && get_primary_role_name_unsafe(user) != "Owner" do %>
              <.table_row_menu_divider />
              <.table_row_menu_button
                phx-click="request_confirmation_toggle"
                phx-value-user_uuid={user.uuid}
                phx-value-is_confirmed={to_string(!!user.confirmed_at)}
                icon={if user.confirmed_at, do: "hero-envelope-open", else: "hero-envelope"}
                label={
                  if user.confirmed_at,
                    do: gettext("Unconfirm Email"),
                    else: gettext("Confirm Email")
                }
                variant={if user.confirmed_at, do: "success", else: "warning"}
              />
              <.table_row_menu_button
                phx-click="request_status_toggle"
                phx-value-user_uuid={user.uuid}
                phx-value-is_active={to_string(user.is_active)}
                icon={if user.is_active, do: "hero-check-circle", else: "hero-x-circle"}
                label={if user.is_active, do: gettext("Deactivate"), else: gettext("Activate")}
                variant={if user.is_active, do: "success", else: "warning"}
              />
              <%= if Auth.can_delete_user?(user, @phoenix_kit_current_user) do %>
                <.table_row_menu_divider />
                <.table_row_menu_button
                  phx-click="request_delete_user"
                  phx-value-user_uuid={user.uuid}
                  data-confirm={
                    gettext(
                      "Are you sure you want to delete this user? This action cannot be undone."
                    )
                  }
                  icon="hero-trash"
                  label={gettext("Delete")}
                  variant="error"
                />
              <% end %>
            <% end %>
          </.table_row_menu>
        </:card_actions>
      </.table_default>

      <%!-- Pagination --%>
      <%= if @users != [] && @total_pages > 1 do %>
        <div class="flex justify-center p-4 border-t border-base-300">
          <div class="join">
            <%= for page <- 1..@total_pages do %>
              <button
                class={"join-item btn btn-sm #{if page == @page, do: "btn-active", else: ""}"}
                phx-click="change_page"
                phx-value-page={page}
              >
                {page}
              </button>
            <% end %>
          </div>
        </div>
      <% end %>
    </div>

    <%!-- Enhanced Stats --%>
    <div class="mt-8">
      <h3 class="text-lg font-semibold text-base-content mb-6">{gettext("User Statistics")}</h3>

      <%!-- Main Role Stats --%>
      <div class="grid grid-cols-1 md:grid-cols-4 gap-4 mb-6">
        <PhoenixKitWeb.Components.Core.StatCard.stat_card
          compact={true}
          rounded="xl"
          value={@total_users}
          title={gettext("Total Users")}
          subtitle={gettext("All registered accounts")}
        >
          <:icon>
            <.icon name="hero-users" class="w-5 h-5" />
          </:icon>
        </PhoenixKitWeb.Components.Core.StatCard.stat_card>

        <PhoenixKitWeb.Components.Core.StatCard.stat_card
          compact={true}
          rounded="xl"
          value={@total_owners}
          title={gettext("System Owners")}
          subtitle={gettext("Complete system authority")}
        >
          <:icon>
            <.icon name="hero-shield-check" class="w-5 h-5" />
          </:icon>
        </PhoenixKitWeb.Components.Core.StatCard.stat_card>

        <PhoenixKitWeb.Components.Core.StatCard.stat_card
          compact={true}
          rounded="xl"
          value={@total_admins}
          title={gettext("Administrators")}
          subtitle={gettext("Management privileges")}
        >
          <:icon>
            <.icon name="hero-star" class="w-5 h-5" />
          </:icon>
        </PhoenixKitWeb.Components.Core.StatCard.stat_card>

        <PhoenixKitWeb.Components.Core.StatCard.stat_card
          compact={true}
          rounded="xl"
          value={@total_regular_users}
          title={gettext("Regular Users")}
          subtitle={gettext("Standard access level")}
        >
          <:icon>
            <.icon name="hero-user" class="w-5 h-5" />
          </:icon>
        </PhoenixKitWeb.Components.Core.StatCard.stat_card>
      </div>

      <%!-- Secondary Stats --%>
      <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
        <%!-- Active Users --%>
        <PhoenixKitWeb.Components.Core.StatCard.stat_card
          compact={true}
          rounded="2xl"
          value={@active_users}
          title={gettext("Active Users")}
          subtitle={gettext("Currently online")}
        >
          <:icon>
            <.icon name="hero-check-circle-solid" class="w-5 h-5" />
          </:icon>
        </PhoenixKitWeb.Components.Core.StatCard.stat_card>

        <%!-- Inactive Users --%>
        <PhoenixKitWeb.Components.Core.StatCard.stat_card
          compact={true}
          rounded="2xl"
          value={@inactive_users}
          title={gettext("Inactive Users")}
          subtitle={gettext("Disabled accounts")}
        >
          <:icon>
            <.icon name="hero-x-circle-solid" class="w-5 h-5" />
          </:icon>
        </PhoenixKitWeb.Components.Core.StatCard.stat_card>

        <%!-- Confirmed Users --%>
        <PhoenixKitWeb.Components.Core.StatCard.stat_card
          compact={true}
          rounded="2xl"
          value={@confirmed_users}
          title={gettext("Email Confirmed")}
          subtitle={gettext("Verified emails")}
        >
          <:icon>
            <.icon name="hero-envelope" class="w-5 h-5" />
          </:icon>
        </PhoenixKitWeb.Components.Core.StatCard.stat_card>

        <%!-- Pending Users --%>
        <PhoenixKitWeb.Components.Core.StatCard.stat_card
          compact={true}
          rounded="2xl"
          value={@pending_users}
          title={gettext("Pending Email")}
          subtitle={gettext("Awaiting confirmation")}
        >
          <:icon>
            <.icon name="hero-information-circle-solid" class="w-5 h-5" />
          </:icon>
        </PhoenixKitWeb.Components.Core.StatCard.stat_card>
      </div>
    </div>

    <%!-- Column Selection Modal --%>
    <%= if @show_column_modal do %>
      <div class="modal modal-open" id="column-modal">
        <div class="modal-box max-w-5xl w-11/12 max-h-[90vh] flex flex-col">
          <h3 class="font-bold text-xl mb-4 shrink-0">{gettext("Customize Table Columns")}</h3>
          <p class="text-base-content/70 mb-6 shrink-0">
            {gettext(
              "Drag to reorder selected columns above, or add new columns from the options below. Actions column is always included."
            )}
          </p>

          <form
            phx-submit="update_table_columns"
            id="column-form"
            class="flex flex-col flex-1 min-h-0"
          >
            <%!-- Hidden input to store the column order for form submission --%>
            <input
              type="hidden"
              name="column_order"
              id="column-order-input"
              value={Enum.join(@temp_selected_columns || @selected_columns, ",")}
            />

            <div class="flex flex-col lg:flex-row gap-6 mb-6 flex-1 min-h-0 overflow-y-auto lg:overflow-visible">
              <%!-- Selected Columns Section (Left/Top) --%>
              <div class="flex-1">
                <div class="flex items-center justify-between mb-3">
                  <h4 class="text-sm font-semibold text-base-content/80 uppercase tracking-wide">
                    {gettext("Selected Columns")}
                  </h4>
                  <span class="text-xs text-base-content/60">
                    {gettext("Drag to reorder")}
                  </span>
                </div>
                <.draggable_list
                  id="selected-columns-container"
                  items={
                    Enum.reject(@temp_selected_columns || @selected_columns, &(&1 == "actions"))
                  }
                  item_id={fn col_id -> col_id end}
                  on_reorder="reorder_selected_columns"
                  layout={:list}
                  gap="space-y-2"
                  class="min-h-[120px] lg:min-h-[200px] lg:max-h-[400px] lg:overflow-y-auto border-2 border-dashed border-base-300 rounded-lg p-3 bg-base-50"
                  item_class="flex items-center p-3 rounded-lg bg-primary/10 border border-primary/30 hover:bg-primary/20 transition-colors"
                >
                  <:item :let={column_id}>
                    <% column_meta = PhoenixKit.Users.TableColumns.get_column_metadata(column_id) %>
                    <div class="drag-handle text-primary/60 mr-3">
                      <.icon name="hero-bars-3" class="h-5 w-5" />
                    </div>
                    <div class="flex flex-col flex-1">
                      <span class="label-text font-medium text-base-content">
                        {(column_meta && column_meta.label) || column_id}
                      </span>
                    </div>
                    <button
                      type="button"
                      class="btn btn-ghost btn-xs btn-circle text-error/60 hover:text-error hover:bg-error/10"
                      phx-click="remove_column"
                      phx-value-column_id={column_id}
                      title={gettext("Remove column")}
                    >
                      <.icon name="hero-x-mark" class="h-4 w-4" />
                    </button>
                  </:item>
                </.draggable_list>

                <%!-- Empty state for selected columns --%>
                <%= if length(Enum.reject(@temp_selected_columns || @selected_columns, &(&1 == "actions"))) == 0 do %>
                  <div class="text-center py-12 text-base-content/40 border-2 border-dashed border-base-300 rounded-lg mt-2">
                    <.icon name="hero-clipboard-document-list" class="h-12 w-12 mx-auto mb-3" />
                    <p class="text-sm">{gettext("No columns selected yet")}</p>
                    <p class="text-xs mt-1">{gettext("Add columns from the options below")}</p>
                  </div>
                <% end %>
              </div>

              <%!-- Available Fields Section (Right/Bottom) --%>
              <div class="flex-1">
                <div class="flex items-center justify-between mb-3">
                  <h4 class="text-sm font-semibold text-base-content/80 uppercase tracking-wide">
                    {gettext("Available Fields")}
                  </h4>
                  <span class="text-xs text-base-content/60">
                    {gettext("Click to add")}
                  </span>
                </div>
                <div class="lg:max-h-[400px] lg:overflow-y-auto border border-base-200 rounded-lg bg-base-100">
                  <%!-- Standard Fields Section --%>
                  <%= if map_size(@available_columns.standard) > 0 do %>
                    <div class="p-3">
                      <h5 class="text-xs font-semibold text-base-content/60 mb-2 uppercase tracking-wide">
                        {gettext("Standard Fields")}
                      </h5>
                      <div class="space-y-1">
                        <%= for {column_id, column_meta} <- @available_columns.standard do %>
                          <%= unless column_id in (@temp_selected_columns || @selected_columns) or column_id == "actions" do %>
                            <button
                              type="button"
                              class="available-field w-full flex items-center p-2 rounded-lg hover:bg-base-200 transition-colors text-left border border-transparent hover:border-base-300"
                              phx-click="add_column"
                              phx-value-column_id={column_id}
                              data-column-id={column_id}
                              data-section="available-standard"
                            >
                              <div class="flex flex-col flex-1">
                                <span class="label-text font-medium text-sm text-base-content">
                                  {column_meta.label}
                                </span>
                              </div>
                              <div class="text-success/60">
                                <svg
                                  xmlns="http://www.w3.org/2000/svg"
                                  class="h-4 w-4"
                                  fill="none"
                                  viewBox="0 0 24 24"
                                  stroke="currentColor"
                                >
                                  <path
                                    stroke-linecap="round"
                                    stroke-linejoin="round"
                                    stroke-width="2"
                                    d="M12 4v16m8-8H4"
                                  />
                                </svg>
                              </div>
                            </button>
                          <% end %>
                        <% end %>
                      </div>
                    </div>
                  <% end %>

                  <%!-- Separator Line --%>
                  <%= if map_size(@available_columns.standard) > 0 and map_size(@available_columns.custom) > 0 do %>
                    <div class="border-t border-base-200"></div>
                  <% end %>

                  <%!-- Custom Fields Section --%>
                  <%= if map_size(@available_columns.custom) > 0 do %>
                    <div class="p-3">
                      <h5 class="text-xs font-semibold text-base-content/60 mb-2 uppercase tracking-wide">
                        {gettext("Custom Fields")}
                      </h5>
                      <div class="space-y-1">
                        <%= for {column_id, column_meta} <- @available_columns.custom do %>
                          <%= unless column_id in (@temp_selected_columns || @selected_columns) do %>
                            <button
                              type="button"
                              class="available-field w-full flex items-center p-2 rounded-lg hover:bg-base-200 transition-colors text-left border border-transparent hover:border-base-300"
                              phx-click="add_column"
                              phx-value-column_id={column_id}
                              data-column-id={column_id}
                              data-section="available-custom"
                            >
                              <div class="flex flex-col flex-1">
                                <span class="label-text font-medium text-sm text-base-content">
                                  {column_meta.label}
                                </span>
                              </div>
                              <div class="text-success/60">
                                <svg
                                  xmlns="http://www.w3.org/2000/svg"
                                  class="h-4 w-4"
                                  fill="none"
                                  viewBox="0 0 24 24"
                                  stroke="currentColor"
                                >
                                  <path
                                    stroke-linecap="round"
                                    stroke-linejoin="round"
                                    stroke-width="2"
                                    d="M12 4v16m8-8H4"
                                  />
                                </svg>
                              </div>
                            </button>
                          <% end %>
                        <% end %>
                      </div>
                    </div>
                  <% end %>

                  <%!-- No Available Fields Message --%>
                  <%= if get_available_fields_count(@available_columns, @temp_selected_columns || @selected_columns) == 0 do %>
                    <div class="text-center py-8 text-base-content/40">
                      <p class="text-sm">{gettext("All fields are already selected")}</p>
                    </div>
                  <% end %>
                </div>
              </div>
            </div>

            <div class="modal-action shrink-0 flex-wrap pt-4 border-t border-base-200">
              <button type="submit" class="btn btn-primary">
                {gettext("Apply Changes")}
              </button>
              <button type="button" class="btn btn-outline" phx-click="reset_to_defaults">
                {gettext("Default")}
              </button>
              <button type="button" class="btn btn-ghost" phx-click="hide_column_modal">
                {gettext("Cancel")}
              </button>
            </div>
          </form>
        </div>
        <div class="modal-backdrop" phx-click="hide_column_modal"></div>
      </div>
    <% end %>

    <%!-- Confirmation Modal --%>
    <%= if assigns[:confirmation_modal] && @confirmation_modal.show do %>
      <div class="modal modal-open">
        <div class="modal-box">
          <h3 class="font-bold text-lg">{@confirmation_modal.title}</h3>
          <p class="py-4">{@confirmation_modal.message}</p>
          <div class="modal-action">
            <button class="btn btn-ghost" phx-click="cancel_confirmation">
              {gettext("Cancel")}
            </button>
            <button
              class="btn btn-primary"
              phx-click="confirm_action"
              phx-value-action={@confirmation_modal.action}
              phx-value-user_uuid={@confirmation_modal.user_uuid}
            >
              {@confirmation_modal.button_text}
            </button>
          </div>
        </div>
      </div>
    <% end %>
  </div>
</PhoenixKitWeb.Components.LayoutWrapper.app_layout>
