'use client'; import Link from 'next/link'; import { usePathname, useRouter } from 'next/navigation'; import { useEffect, useState } from 'react'; import { createClient } from '@/lib/supabase/client'; /* ── 3구역 네비게이션 구조 ─────────────────────────────────── */ interface NavItem { href: string; label: string; badge?: string; icon: React.ReactNode; } interface NavGroup { title: string; items: NavItem[]; } const navGroups: NavGroup[] = [ { title: 'AI 상품', items: [ { href: '/services/prompt', label: '프롬프트 스토어', badge: 'HOT', icon: ( ), }, { href: '/services/automation', label: '업무 자동화', icon: ( ), }, { href: '/services/ai-kit', label: 'AI 자동화 키트', badge: '구독', icon: ( ), }, ], }, { title: '무료 도구', items: [ { href: '/saju', label: 'AI 사주 분석', badge: '무료', icon: ( ), }, { href: '/services/lotto', label: '로또 번호 추천', badge: '무료', icon: ( ), }, { href: '/tools', label: '도구 쇼케이스', badge: 'DEMO', icon: ( ), }, ], }, { title: '외주 의뢰', items: [ { href: '/freelance', label: '외주 개발 문의', icon: ( ), }, { href: '/services/website', label: '홈페이지 제작', icon: ( ), }, ], }, ]; /* ── 배지 색상 ─────────────────────────────────────────────── */ function badgeStyle(badge: string) { switch (badge) { case 'HOT': return 'bg-rose-500/15 text-rose-400'; case '구독': return 'bg-violet-500/15 text-violet-400'; case '무료': return 'bg-sky-500/15 text-sky-400'; case 'DEMO': return 'bg-amber-500/15 text-amber-400'; default: return 'bg-emerald-500/15 text-emerald-400'; } } /* ── 컴포넌트 ──────────────────────────────────────────────── */ interface SidebarProps { isOpen: boolean; onClose: () => void; } export default function Sidebar({ isOpen, onClose }: SidebarProps) { const pathname = usePathname(); const router = useRouter(); const [userEmail, setUserEmail] = useState(null); const supabase = createClient(); useEffect(() => { supabase.auth.getUser().then(({ data }) => { setUserEmail(data.user?.email ?? null); }); const { data: { subscription } } = supabase.auth.onAuthStateChange((_, session) => { setUserEmail(session?.user?.email ?? null); }); return () => subscription.unsubscribe(); }, []); const handleLogout = async () => { await supabase.auth.signOut(); router.push('/'); router.refresh(); onClose(); }; return ( <> {/* Mobile overlay */} {isOpen && (
)} {/* Sidebar */} ); }