"use client";

import {
  FileSearchIcon,
  FileTextIcon,
  LifeBuoyIcon,
  Link2Icon,
  SearchCheckIcon,
  SearchIcon,
  Settings2Icon,
  TerminalSquareIcon,
} from "lucide-react";
import Link from "next/link";
import { useTranslations } from "next-intl";
import type * as React from "react";
import { BrandLogo } from "@/components/brand-logo";
import { NavMain } from "@/components/nav-main";
import { NavUser } from "@/components/nav-user";
import { type OrgSummary, OrgSwitcher } from "@/components/org-switcher";
import { TeamSwitcher } from "@/components/team-switcher";
import {
  Sidebar,
  SidebarContent,
  SidebarFooter,
  SidebarHeader,
  SidebarMenu,
  SidebarMenuButton,
  SidebarMenuItem,
  SidebarRail,
} from "@/components/ui/sidebar";
import { isUnderConstruction } from "@/lib/feature-status";
import type { ActivationSnapshot } from "@/lib/onboarding/activation/types";

const navMainConfig = [
  {
    labelKey: "checklist",
    url: "/flight-checker",
    icon: <TerminalSquareIcon />,
    isActive: true,
    items: [{ label: "SEO Insight", url: "/flight-checker" }],
  },
  {
    labelKey: "keywords",
    url: "/keywords/reservoir",
    icon: <SearchIcon />,
    isActive: true,
    items: [
      { labelKey: "overview", url: "/keywords/overview" },
      { labelKey: "reservoir", url: "/keywords/reservoir" },
      { labelKey: "recherche", url: "/keywords/recherche" },
      { labelKey: "planning", url: "/keywords/planning" },
    ],
  },
  {
    labelKey: "pages",
    url: "/pages",
    icon: <FileSearchIcon />,
    isActive: true,
    items: [{ labelKey: "inventory", url: "/pages" }],
  },
  {
    labelKey: "backlink",
    url: "/backlink/reservoir",
    icon: <Link2Icon />,
    isActive: true,
    items: [
      { labelKey: "overview", url: "/backlink/overview" },
      { labelKey: "reservoir", url: "/backlink/reservoir" },
      { labelKey: "recherche", url: "/backlink/recherche" },
      { labelKey: "planning", url: "/backlink/planning" },
      { labelKey: "profile", url: "/backlink/profile" },
    ],
  },
  {
    labelKey: "content",
    url: "/content/planning",
    icon: <FileTextIcon />,
    isActive: true,
    items: [
      { labelKey: "overview", url: "/content/overview" },
      { labelKey: "planning", url: "/content/planning" },
      { labelKey: "online", url: "/content/online" },
      { labelKey: "stats", url: "/content/stats" },
    ],
  },
  {
    labelKey: "gsc",
    url: "/gsc",
    icon: <SearchCheckIcon />,
    isActive: true,
    items: [{ labelKey: "gscManage", url: "/gsc" }],
  },
  {
    labelKey: "support",
    url: "/support",
    icon: <LifeBuoyIcon />,
    items: [
      { labelKey: "myTickets", url: "/support" },
      { labelKey: "staffInbox", url: "/support/staff" },
      { labelKey: "godMode", url: "/admin", superAdminOnly: true },
    ],
  },
  {
    labelKey: "settings",
    url: "/settings/account",
    icon: <Settings2Icon />,
    items: [
      { labelKey: "account", url: "/settings/account" },
      { labelKey: "team", url: "/settings/team" },
      { labelKey: "billing", url: "/settings/billing" },
      { labelKey: "integrations", url: "/settings/integrations" },
    ],
  },
] as const;

export function AppSidebar({
  user,
  orgs = [],
  activeOrgId = null,
  currentPlan = null,
  isSuperAdmin = false,
  activation = null,
  ...props
}: React.ComponentProps<typeof Sidebar> & {
  user?: { name: string; email: string; avatar: string };
  orgs?: OrgSummary[];
  activeOrgId?: string | null;
  currentPlan?: string | null;
  isSuperAdmin?: boolean;
  /** État d'activation dérivé côté serveur — traversé jusqu'à ActivationCard. */
  activation?: ActivationSnapshot | null;
}) {
  const t = useTranslations("Nav");
  const navMain = navMainConfig.map((item) => ({
    title: t(item.labelKey),
    url: item.url,
    icon: item.icon,
    isActive: "isActive" in item ? item.isActive : undefined,
    underConstruction: isUnderConstruction(item.url),
    items: item.items
      // Super-admin-only entries (e.g. global Users management) are hidden from
      // everyone else — the target page also re-asserts the gate server-side.
      .filter(
        (subItem) =>
          !("superAdminOnly" in subItem && subItem.superAdminOnly) ||
          isSuperAdmin,
      )
      .map((subItem) => ({
        title: "label" in subItem ? subItem.label : t(subItem.labelKey),
        url: subItem.url,
        underConstruction: isUnderConstruction(subItem.url),
      })),
  }));

  return (
    <Sidebar collapsible="icon" {...props}>
      <SidebarHeader>
        <SidebarMenu>
          <SidebarMenuItem>
            <SidebarMenuButton asChild tooltip="SEO Insight">
              <Link href="/keywords/reservoir">
                <BrandLogo size={24} className="shrink-0" />
                <span className="font-semibold text-sm">SEO Insight</span>
              </Link>
            </SidebarMenuButton>
          </SidebarMenuItem>
        </SidebarMenu>
        <OrgSwitcher orgs={orgs} activeOrgId={activeOrgId} />
        <TeamSwitcher activation={activation} />
      </SidebarHeader>
      <SidebarContent>
        <NavMain items={navMain} />
      </SidebarContent>
      <SidebarFooter>
        <NavUser
          user={user ?? { name: "", email: "", avatar: "" }}
          currentPlan={currentPlan}
        />
      </SidebarFooter>
      <SidebarRail />
    </Sidebar>
  );
}
