import { redirect } from "next/navigation";

import { AnnouncementBanner } from "@/components/dashboard/announcement-banner";
import { ChatWidget } from "@/components/dashboard/chat-widget";
import { buildDashboardMobileNav } from "@/components/dashboard/nav-items";
import { DashboardSidebar } from "@/components/dashboard/sidebar";
import { DashboardTopbar } from "@/components/dashboard/topbar";
import { loadActiveAnnouncement } from "@/lib/announcements";
import { auth } from "@/lib/auth";
import { db } from "@/lib/db";

export default async function DashboardLayout({ children }: { children: React.ReactNode }) {
  const session = await auth();
  if (!session?.user) redirect("/sign-in?callbackUrl=/dashboard");

  const sub = await db.subscription.findUnique({
    where: { userId: session.user.id },
    select: { plan: true },
  });
  const announcement = await loadActiveAnnouncement({
    role: session.user.role,
    plan: sub?.plan ?? "FREE",
  });

  return (
    <div className="flex min-h-screen min-w-0 flex-1">
      <DashboardSidebar role={session.user.role} />
      <div className="flex min-w-0 flex-1 flex-col">
        {announcement && (
          <AnnouncementBanner
            id={announcement.id}
            message={announcement.message}
            type={announcement.type}
            link={announcement.link}
          />
        )}
        <DashboardTopbar
          name={session.user.name ?? session.user.email ?? "Traveler"}
          email={session.user.email ?? ""}
          image={session.user.image ?? null}
          role={session.user.role}
          mobileNav={{
            brand: "Trovo",
            items: buildDashboardMobileNav(session.user.role),
            footer: "Trovo · v0.1",
          }}
        />
        <main id="main-content" className="flex-1 px-4 py-6 sm:px-6 sm:py-8 lg:px-10">{children}</main>
      </div>
      <ChatWidget />
    </div>
  );
}
