import Link from 'next/link';

interface NavItem {
  href: string;
  label: string;
  /** Permission required to see this item. Empty array = always visible. */
  permissions?: string[];
}

const GROUPS: Array<{ title: string; items: NavItem[] }> = [
  {
    title: 'Operations',
    items: [
      { href: '/overview', label: 'Overview' },
      { href: '/bookings', label: 'Bookings', permissions: ['booking.read.all', 'booking.read.assigned'] },
      { href: '/listings', label: 'Listings', permissions: ['listing.read.all', 'listing.read.assigned'] },
      { href: '/engagement', label: 'User behavior', permissions: ['audit.read.all', 'admin.report.read', 'user.read.all', 'listing.read.all'] },
    ],
  },
  {
    title: 'Partners',
    items: [
      { href: '/partners', label: 'Overview', permissions: ['business.read.all', 'business.read.assigned', 'admin.provider.read'] },
      { href: '/businesses', label: 'Businesses', permissions: ['business.read.all', 'business.read.assigned', 'admin.provider.read'] },
      { href: '/memberships', label: 'Memberships', permissions: ['membership.read.assigned', 'user.read.all'] },
    ],
  },
  {
    title: 'People',
    items: [
      { href: '/users', label: 'Users', permissions: ['user.read.all', 'admin.user.read'] },
      { href: '/roles', label: 'Roles', permissions: ['role.read.all'] },
      { href: '/permissions', label: 'Permissions', permissions: ['permission.read.all'] },
    ],
  },
  {
    title: 'Finance',
    items: [
      { href: '/payments', label: 'Payments', permissions: ['payment.read.all'] },
      { href: '/refunds', label: 'Refunds', permissions: ['refund.approve', 'payment.read.all'] },
      { href: '/payouts', label: 'Payouts', permissions: ['payout.read.all', 'payout.read.assigned'] },
      { href: '/reports', label: 'Reports', permissions: ['audit.read.financial', 'admin.report.read'] },
    ],
  },
  {
    title: 'Content',
    items: [{ href: '/content', label: 'Content', permissions: ['content.update', 'admin.content.read', 'admin.content.write'] }],
  },
  {
    title: 'Control Tower',
    items: [
      { href: '/category-modes', label: 'Category modes', permissions: ['category_mode.read.all', 'admin.content.read', 'admin.provider.read', 'superadmin.integration.manage'] },
      { href: '/provider-integrations', label: 'Provider integrations', permissions: ['provider_integration.read.all', 'admin.provider.read', 'superadmin.integration.manage'] },
      { href: '/payment-provider-settings', label: 'Payment provider settings', permissions: ['provider_integration.read.all', 'admin.provider.read', 'superadmin.integration.manage'] },
      { href: '/third-party-api-settings', label: 'Third-party API settings', permissions: ['provider_integration.read.all', 'admin.provider.read', 'superadmin.integration.manage'] },
      { href: '/provider-health', label: 'Provider health', permissions: ['provider_integration.health.read', 'provider_integration.read.all', 'audit.read.support', 'admin.provider.read', 'superadmin.integration.manage'] },
      { href: '/provider-audit-history', label: 'Provider audit history', permissions: ['provider_integration.audit.read', 'admin.audit.read', 'audit.read.all', 'superadmin.integration.manage'] },
    ],
  },
  {
    title: 'System',
    items: [
      { href: '/audit-logs', label: 'Audit logs', permissions: ['audit.read.support', 'audit.read.financial', 'audit.read.all', 'admin.audit.read'] },
      { href: '/demo-access', label: 'Demo access', permissions: ['superadmin.system.manage', '*'] },
      { href: '/settings', label: 'Settings' },
    ],
  },
];

interface Props {
  permissions: string[];
}

export function Sidebar({ permissions }: Props) {
  const has = (req?: string[]) => !req?.length || req.some((p) => permissions.includes(p)) || permissions.includes('*');
  return (
    <nav className="sidebar">
      <h1>Navi</h1>
      {GROUPS.map((g) => {
        const visible = g.items.filter((i) => has(i.permissions));
        if (!visible.length) return null;
        return (
          <div key={g.title}>
            <h3>{g.title}</h3>
            {visible.map((i) => (
              <Link key={i.href} href={i.href}>
                {i.label}
              </Link>
            ))}
          </div>
        );
      })}
    </nav>
  );
}
