import type { Metadata } from "next";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
import { auth } from "@/lib/auth"
import { prisma } from "@/lib/prisma"
import { headers } from "next/headers"
import { redirect } from "next/navigation"
import { DataTable } from "../loans/_components/data-table"
import { columns } from "./_component/user-columns"

export const metadata: Metadata = {
  title: "User Management | Admin | E-Library",
  description: "Manage users and roles in the Federal Polytechnic Bali E-Library.",
};

export default async function AdminUsersPage() {
  const session = await auth.api.getSession({ headers: await headers() })
  if (!session) redirect("/login")

  const currentUser = await prisma.user.findUnique({ where: { id: session.user.id } })
  if (!currentUser || (currentUser.role !== "ADMIN" && currentUser.role !== "STAFF")) {
      redirect("/")
  }

  const allUsers = await prisma.user.findMany({
    orderBy: { createdAt: "desc" },
  })

  const formattedUsers = allUsers.map(u => ({
    ...u,
    currentUserRole: currentUser.role
  }))

  const staff = formattedUsers.filter(u => u.role === "ADMIN" || u.role === "STAFF")
  const students = formattedUsers.filter(u => u.role === "STUDENT")

  return (
    <main className="flex-1 space-y-6 p-4 md:p-6">
      <div>
        <h1 className="text-3xl font-bold tracking-tight">User Management</h1>
        <p className="text-muted-foreground">
          Manage system users and their roles
        </p>
      </div>

      <Tabs defaultValue="students">
        <TabsList>
          <TabsTrigger value="students">
            Students
            <span className="ml-2 text-xs bg-muted px-1.5 py-0.5 rounded-full">
              {students.length}
            </span>
          </TabsTrigger>
          <TabsTrigger value="staff">
            Staff
            <span className="ml-2 text-xs bg-muted px-1.5 py-0.5 rounded-full">
              {staff.length}
            </span>
          </TabsTrigger>
        </TabsList>

        <TabsContent value="students" className="mt-6">
          <DataTable columns={columns} data={students} searchKey="name" />
        </TabsContent>

        <TabsContent value="staff" className="mt-6">
          <DataTable columns={columns} data={staff} searchKey="name" />
        </TabsContent>
      </Tabs>
    </main>
  )
}
