import { redirect } from "next/navigation";
import type { ReactNode } from "react";
import { HireWizardProvider } from "@/components/hire/HireWizardContext";
import { Sidebar } from "@/components/shell/Sidebar";
import { Topbar } from "@/components/shell/Topbar";
import { loadOpenPositions } from "@/lib/positions";
import { createClient } from "@/lib/supabase/server";

export default async function AppLayout({ children }: { children: ReactNode }) {
  const supabase = await createClient();
  const {
    data: { user },
  } = await supabase.auth.getUser();
  if (!user) redirect("/login");

  const { data: profile } = await supabase.from("profiles").select("full_name, email, role").eq("id", user.id).single();
  const canEdit = profile?.role === "hr_admin";

  const userLabel = profile?.full_name || profile?.email || user.email || "";

  const [openPositions, locationsRes, draftsRes] = canEdit
    ? await Promise.all([
        loadOpenPositions(supabase),
        supabase.from("locations").select("id, name, country").order("name"),
        supabase.from("hire_drafts").select("id, step, payload, updated_at").eq("created_by", user.id).order("updated_at", { ascending: false }),
      ])
    : [[], { data: [] }, { data: [] }];

  return (
    <HireWizardProvider openPositions={openPositions} locations={locationsRes.data ?? []} drafts={draftsRes.data ?? []}>
      <div className="flex min-h-screen">
        <Sidebar />
        <div className="ml-[236px] flex flex-1 flex-col">
          <Topbar userLabel={userLabel} role={profile?.role} canEdit={canEdit} />
          <main className="flex-1 px-6 py-6">
            <div className="mx-auto w-full max-w-[1280px]">{children}</div>
          </main>
        </div>
      </div>
    </HireWizardProvider>
  );
}
