"use client";

import Link from "next/link";
import { usePathname } from "next/navigation";
import { useState } from "react";

import { hasAdminPermission, type AdminPermission } from "@/lib/admin-rbac";
import type { SessionUser } from "@/lib/session";

type LinkItem = { href: string; label: string; permission: string };
type Group = {
  label: string;
  links: readonly LinkItem[];
  /** Ako postoji, link je u accordion-u sa subitems-ima. */
  subitems?: readonly LinkItem[];
};

const adminGroups: readonly Group[] = [
  {
    label: "Sadržaj",
    links: [
      { href: "/admin", label: "Kontrolna tabla", permission: "dashboard:view" },
      { href: "/admin/live-chat", label: "💬 Live chat", permission: "dashboard:view" },
      { href: "/admin/prijave", label: "Prijave", permission: "submissions:manage" },
      { href: "/admin/kompanije", label: "Kompanije", permission: "companies:manage" },
      { href: "/admin/mesta", label: "Mesta", permission: "places:manage" },
      { href: "/admin/google-import", label: "🗺️ Uvoz iz Google-a", permission: "submissions:manage" },
      { href: "/admin/recenzije", label: "Recenzije", permission: "reviews:manage" },
      { href: "/admin/trust-safety", label: "Trust & Safety", permission: "reviews:manage" },
      { href: "/admin/trust", label: "Trust Score panel", permission: "reviews:manage" },
      { href: "/admin/dogadjaji", label: "Događaji", permission: "events:manage" },
      { href: "/admin/nekretnine", label: "Nekretnine", permission: "real-estate:manage" },
      { href: "/admin/automobili", label: "Automobili", permission: "cars:manage" },
      { href: "/admin/poslovi", label: "Poslovi", permission: "jobs:manage" },
      { href: "/admin/prodavnica", label: "Prodavnica", permission: "store:manage" },
      { href: "/admin/akcije", label: "Akcije i popusti", permission: "deals:manage" },
      { href: "/admin/magazin", label: "Magazin", permission: "magazine:manage" },
      { href: "/admin/magazin/pomeni", label: "🔗 Pomeni na odobrenju", permission: "magazine:manage" },
      { href: "/admin/magazin/izdanja", label: "📕 PDF izdanja", permission: "magazine:manage" },
    ],
  },
  {
    label: "Monetizacija",
    links: [
      { href: "/admin/oglasi", label: "Oglasi i isticanja", permission: "ads:manage" },
      { href: "/admin/paketi", label: "Paketi i nivoi", permission: "plans:manage" },
      { href: "/admin/paketi/isticanja", label: "Isticanja", permission: "placements:manage" },
      { href: "/admin/naplata", label: "Naplata", permission: "billing:manage" },
      { href: "/admin/prospekti", label: "🎯 Prospekti (B2B prodaja)", permission: "billing:manage" },
      { href: "/admin/komercijalni-upiti", label: "Sales CRM", permission: "billing:manage" },
      { href: "/admin/commercial-scale", label: "Komercijalni rast", permission: "billing:manage" },
      { href: "/admin/affiliate", label: "Affiliate konverzije", permission: "billing:manage" },
      { href: "/admin/sponzorisani", label: "Sponzorisan sadržaj", permission: "ads:manage" },
      { href: "/admin/izvestaji", label: "📊 Industrijski izveštaji", permission: "billing:manage" },
    ],
  },
  {
    label: "Sistem",
    links: [
      { href: "/admin/seo", label: "🚀 SEO Control Center", permission: "settings:manage" },
      { href: "/admin/ops", label: "⚙️ Ops Command Center", permission: "settings:manage" },
      { href: "/admin/zdravlje-poslova", label: "❤️ Zdravlje zakazanih poslova", permission: "settings:manage" },
      { href: "/admin/ops/auto-moderation", label: "🛡️ Auto-moderacija", permission: "settings:manage" },
      { href: "/admin/voice-aliases", label: "🎤 Voice aliasi", permission: "settings:manage" },
      { href: "/admin/voice-analytics", label: "📊 Voice analytics", permission: "settings:manage" },
      { href: "/admin/webhooks", label: "🔔 Webhooks", permission: "settings:manage" },
      { href: "/admin/media", label: "Medijska biblioteka", permission: "media:manage" },
      { href: "/admin/notifikacije", label: "Notifikacije", permission: "notifications:manage" },
      { href: "/admin/portal-nalozi", label: "Portal nalozi", permission: "portal-accounts:manage" },
      { href: "/admin/soft-launch", label: "Soft launch", permission: "settings:manage" },
      { href: "/admin/market-leadership", label: "Tržišno vođstvo", permission: "settings:manage" },
      { href: "/admin/aktivnosti", label: "Aktivnosti", permission: "audit:view" },
    ],
    subitems: [],
  },
  {
    label: "Tim & podešavanja",
    links: [
      { href: "/admin/korisnici", label: "Korisnici", permission: "users:manage" },
      { href: "/admin/podesavanja", label: "Podešavanja portala", permission: "settings:manage" },
    ],
  },
] as const;

// Šifrarnici se prikazuju kao accordion ispod jednog top-level link-a,
// umesto da troše 5 vidljivih slotova u glavnoj listi.
const SIFRARNICI_LINKS: readonly LinkItem[] = [
  { href: "/admin/sifrarnici/kategorije", label: "Kategorije", permission: "taxonomy:manage" },
  { href: "/admin/sifrarnici/tipovi-nekretnina", label: "Tipovi nekretnina", permission: "taxonomy:manage" },
  { href: "/admin/sifrarnici/marke-automobila", label: "Marke automobila", permission: "taxonomy:manage" },
  { href: "/admin/sifrarnici/regioni", label: "Regioni i naselja", permission: "taxonomy:manage" },
  { href: "/admin/sifrarnici/oznake", label: "Oznake", permission: "taxonomy:manage" },
  { href: "/admin/sifrarnici/bedzevi", label: "Bedževi", permission: "taxonomy:manage" },
] as const;

function isActive(pathname: string, href: string) {
  if (href === "/admin") return pathname === href;
  return pathname === href || pathname.startsWith(`${href}/`);
}

export function Sidebar({ user }: { user: SessionUser }) {
  const pathname = usePathname();
  const taxonomiesActive = pathname.startsWith("/admin/sifrarnici");
  const [taxonomiesOpen, setTaxonomiesOpen] = useState(taxonomiesActive);

  const canTaxonomies = hasAdminPermission(user, "taxonomy:manage");

  return (
    <aside className="admin-sidebar hidden lg:block">
      <div className="flex h-full flex-col">
        <div className="border-b border-border/70 px-6 py-6">
          <p className="eyebrow">Admin panel</p>
          <h2 className="mt-2 font-display text-[2.1rem] font-semibold leading-none text-foreground">
            BiznisPortal
          </h2>
          <p className="mt-3 text-[0.98rem] leading-8 text-muted-foreground">
            Kontrolni centar za profile, monetizaciju, oglase i sadržaj portala.
          </p>
          <Link href="/admin/kompanije/nova" className="primary-button mt-5 inline-flex !px-6 !py-3">
            Nova kompanija
          </Link>
        </div>

        <div className="admin-sidebar-scroll space-y-6">
          {adminGroups.map((group) => (
            <section key={group.label}>
              <p className="px-3 text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground">
                {group.label}
              </p>
              <nav className="mt-3 flex flex-col gap-2">
                {group.links
                  .filter((link) =>
                    hasAdminPermission(user, link.permission as AdminPermission),
                  )
                  .map((link) => {
                    const active = isActive(pathname, link.href);
                    return (
                      <Link
                        key={link.href}
                        href={link.href}
                        data-active={active}
                        className="admin-sidebar-link"
                      >
                        <span className="admin-sidebar-link-dot" aria-hidden="true" />
                        <span className="min-w-0 truncate">{link.label}</span>
                      </Link>
                    );
                  })}

                {/* Šifrarnici accordion — samo u "Sistem" grupi */}
                {group.label === "Sistem" && canTaxonomies && (
                  <>
                    <button
                      type="button"
                      onClick={() => setTaxonomiesOpen((v) => !v)}
                      data-active={taxonomiesActive}
                      aria-expanded={taxonomiesOpen}
                      className="admin-sidebar-link justify-between"
                    >
                      <span className="flex min-w-0 items-center gap-2">
                        <span className="admin-sidebar-link-dot" aria-hidden="true" />
                        <span className="truncate">Šifrarnici</span>
                      </span>
                      <svg
                        width="12"
                        height="12"
                        viewBox="0 0 24 24"
                        fill="none"
                        stroke="currentColor"
                        strokeWidth="2.5"
                        strokeLinecap="round"
                        strokeLinejoin="round"
                        className={`shrink-0 transition ${taxonomiesOpen ? "rotate-180" : ""}`}
                        aria-hidden="true"
                      >
                        <path d="M6 9l6 6 6-6" />
                      </svg>
                    </button>
                    {taxonomiesOpen && (
                      <div className="ml-3 mt-1 flex flex-col gap-1 border-l border-border pl-3">
                        {SIFRARNICI_LINKS.map((sub) => {
                          const active = isActive(pathname, sub.href);
                          return (
                            <Link
                              key={sub.href}
                              href={sub.href}
                              data-active={active}
                              className="admin-sidebar-link !py-1.5 !text-[0.85rem]"
                            >
                              <span className="min-w-0 truncate">{sub.label}</span>
                            </Link>
                          );
                        })}
                      </div>
                    )}
                  </>
                )}
              </nav>
            </section>
          ))}
        </div>
      </div>
    </aside>
  );
}
