import { NextRequest, NextResponse } from "next/server";
import { getAdminSession } from "@/lib/admin/auth";
import { getUserPermissions } from "@/lib/admin/permissions";
import { db } from "@/lib/admin/db";

export const dynamic = "force-dynamic";

export async function GET(req: NextRequest) {
  try {
    const ctx = await getAdminSession(req);
    if (!ctx) {
      return NextResponse.json({ authenticated: false }, { status: 401 });
    }

    const { user, session } = ctx;
    const permissions = getUserPermissions(user);

    let pendingResetRequestsCount = 0;
    if (user.level === "MAIN_ADMIN") {
      const allRequests = await db.getResetRequests();
      const now = new Date().toISOString();
      pendingResetRequestsCount = allRequests.filter(
        (r) => r.status === "PENDING" && r.expiresAt > now
      ).length;
    }

    return NextResponse.json({
      authenticated: true,
      user: {
        id: user.id,
        email: user.email,
        name: user.name,
        level: user.level,
        role: user.role,
        status: user.status,
        passwordChangeRequired: user.passwordChangeRequired,
        twoFactorEnabled: user.twoFactorEnabled,
        hasPasskey: Boolean(user.webauthnCredentials && user.webauthnCredentials.length > 0),
        passkeyCount: user.webauthnCredentials?.length || 0,
        hasPin: Boolean(user.pinHash),
        lastLoginAt: user.lastLoginAt,
        createdAt: user.createdAt,
        // Author / profile fields (non-sensitive) for the account center.
        displayName: user.displayName || "",
        jobTitle: user.jobTitle || "",
        shortBio: user.shortBio || "",
        longBio: user.longBio || "",
        location: user.location || "",
        professionalEmail: user.professionalEmail || "",
        authorSlug: user.authorSlug || "",
        avatarUrl: user.avatarUrl || null,
        avatarMediaId: user.avatarMediaId || null,
        socials: {
          linkedin: user.socials?.linkedin || "",
          instagram: user.socials?.instagram || "",
          x: user.socials?.x || "",
          website: user.socials?.website || "",
          github: user.socials?.github || "",
          youtube: user.socials?.youtube || "",
        },
      },
      session: {
        id: session.id,
        device: session.device,
        browser: session.browser,
        createdAt: session.createdAt,
        lastActiveAt: session.lastActiveAt,
        isLocked: Boolean(session.isLocked),
        lockedAt: session.lockedAt || null,
      },
      permissions,
      pendingResetRequestsCount,
    });
  } catch (error) {
    console.error("[api/admin/auth/me] Error:", error);
    return NextResponse.json({ error: "Failed to resolve session." }, { status: 500 });
  }
}
