import { Fingerprint } from "lucide-react";
import { redirect } from "next/navigation";

import { ListPageCard } from "@/app/dashboard/_components";
import { isBackendAuthFailure } from "@/lib/server/backend-auth-failure";
import { SessionsPageClient } from "./_components/sessions-page-client";
import { fetchBackendSessions } from "./_lib/sessions-server-api";

type SessionsPageProps = {
  searchParams?: Promise<Record<string, string | string[] | undefined>>;
};

export default async function AdminsSessionsPage({ searchParams }: SessionsPageProps) {
  const params = (await searchParams) ?? {};
  const userIdRaw = typeof params.userId === "string" ? Number(params.userId) : NaN;
  const customerIdRaw = typeof params.customerId === "string" ? Number(params.customerId) : NaN;
  const userId = Number.isFinite(userIdRaw) && userIdRaw > 0 ? userIdRaw : null;
  const customerId = Number.isFinite(customerIdRaw) && customerIdRaw > 0 ? customerIdRaw : null;

  const { sessions, total, errorMessage, onlineWindowSeconds, idleExpireSeconds, status } =
    await fetchBackendSessions({
      status: "active",
      userId,
      customerId,
    });

  if (isBackendAuthFailure(status, errorMessage)) {
    redirect("/guest/session-expired");
  }

  return (
    <ListPageCard
      icon={Fingerprint}
      title="Active Sessions"
      description="See who is online, whose session is still valid, and force-logout when needed. Idle sessions auto-end after inactivity."
      breadcrumb={[
        { label: "Admins & Access", href: "/dashboard/admins/users" },
        { label: "Active Sessions" },
      ]}
    >
      <SessionsPageClient
        initialSessions={sessions}
        initialTotal={total}
        initialErrorMessage={errorMessage}
        onlineWindowSeconds={onlineWindowSeconds}
        idleExpireSeconds={idleExpireSeconds}
        initialUserId={userId}
        initialCustomerId={customerId}
      />
    </ListPageCard>
  );
}
