'use client'
import Link from 'next/link'
import { usePathname, useRouter } from 'next/navigation'
import { useState } from 'react'
import { cn } from '@/lib/utils'
import { signOut } from '@/lib/auth-actions'
import type { SpaceMember, Space } from '@/lib/types'
import {
Menu, X, LayoutDashboard, ListChecks, FolderKanban, Settings2,
MessageSquare, Users, CreditCard, BookUser, Download, LogOut,
} from 'lucide-react'
function NavLink({
href, label, icon: Icon, badge, active, onClick,
}: {
href: string
label: string
icon: React.ElementType
badge?: number
active: boolean
onClick?: () => void
}) {
return (
{label}
{badge && badge > 0 ? (
{badge}
) : null}
)
}
// Bottom nav items for mobile
const MOBILE_NAV = [
{ label: 'Home', href: '/dashboard', icon: LayoutDashboard },
{ label: 'Tasks', href: '/tasks', icon: ListChecks },
{ label: 'Comms', href: '/comms', icon: MessageSquare },
{ label: 'Members', href: '/members', icon: Users },
{ label: 'More', href: null, icon: Menu },
]
interface AppSidebarProps {
member: SpaceMember & { spaces: Space }
taskBadge?: number
commsBadge?: number
paymentBadge?: number
}
export function AppSidebar({ member, taskBadge = 0, commsBadge = 0, paymentBadge = 0 }: AppSidebarProps) {
const pathname = usePathname()
const router = useRouter()
const space = member.spaces
const initials = member.display_name.split(' ').map(n => n[0]).join('').toUpperCase().slice(0, 2)
const isAdmin = member.role === 'admin' || member.role === 'board'
const [drawerOpen, setDrawerOpen] = useState(false)
function isActive(href: string) {
return pathname === href || pathname.startsWith(href + '/')
}
async function handleSignOut() {
await signOut()
}
const SidebarContent = ({ onNav }: { onNav?: () => void }) => (
<>
{/* Logo */}
{'{'}hs{'}'}
{space?.name || 'My Space'}
{/* Nav */}
{/* User */}
>
)
return (
<>
{/* ── Desktop sidebar ─────────────────────────────────── */}
{/* ── Mobile: top bar ──────────────────────────────────── */}
hs
{space?.name}
{/* ── Mobile: full drawer ──────────────────────────────── */}
{drawerOpen && (
{/* Backdrop */}
setDrawerOpen(false)} />
{/* Drawer */}
Menu
setDrawerOpen(false)} />
)}
>
)
}