import React from 'react';
import { useNavigate, useLocation, Link } from 'react-router-dom';
import {
  Home, Users, Disc, Radio, Settings, LogOut, ShoppingBag,
  GraduationCap, BarChart2, Shield, Box, MessageSquare, Cloud,
  Layers, Cpu, Heart, ListMusic, CreditCard, DollarSign, Terminal,
  ChevronLeft, ChevronRight,
} from 'lucide-react';
import { NavItem } from '../../types';
import { useAuthStore } from '@/features/auth/store/authStore';
import { useUIStore } from '@/stores/ui';
import { cn } from '@/lib/utils';
import { Button } from '@/components/ui/button';

interface SidebarProps {
  currentView?: string;
  onNavigate?: (viewId: string) => void;
  onLogout?: () => void;
}

const navItems: { section: string; items: NavItem[] }[] = [
  {
    section: 'My Studio',
    items: [
      { id: 'dashboard', label: 'Command Center', icon: <Home className="w-4 h-4" /> },
      { id: 'studio', label: 'Cloud Files', icon: <Cloud className="w-4 h-4" /> },
      { id: 'tracks', label: 'Projects', icon: <Layers className="w-4 h-4" /> },
      { id: 'gear', label: 'Gear Locker', icon: <Box className="w-4 h-4" /> },
      { id: 'analytics', label: 'Performance', icon: <BarChart2 className="w-4 h-4" /> },
    ],
  },
  {
    section: 'Veza Network',
    items: [
      { id: 'social', label: 'Community Feed', icon: <Users className="w-4 h-4" /> },
      { id: 'marketplace', label: 'Marketplace', icon: <ShoppingBag className="w-4 h-4" /> },
      { id: 'live', label: 'Live Sessions', icon: <Radio className="w-4 h-4" />, badge: 3 },
      { id: 'chat', label: 'Channels', icon: <MessageSquare className="w-4 h-4" />, badge: 12 },
      { id: 'education', label: 'Academy', icon: <GraduationCap className="w-4 h-4" /> },
    ],
  },
  {
    section: 'Commerce',
    items: [
      { id: 'sell', label: 'Seller Dashboard', icon: <DollarSign className="w-4 h-4" /> },
      { id: 'wishlist', label: 'Wishlist', icon: <Heart className="w-4 h-4" /> },
      { id: 'purchases', label: 'Purchases', icon: <CreditCard className="w-4 h-4" /> },
    ],
  },
  {
    section: 'Library',
    items: [
      { id: 'playlists', label: 'Playlists', icon: <ListMusic className="w-4 h-4" /> },
      { id: 'queue', label: 'Play Queue', icon: <Disc className="w-4 h-4" /> },
    ],
  },
  {
    section: 'System',
    items: [
      { id: 'developer', label: 'Developer API', icon: <Terminal className="w-4 h-4" /> },
      { id: 'admin', label: 'Admin Panel', icon: <Shield className="w-4 h-4" /> },
    ],
  },
];

const routeMap: Record<string, string> = {
  dashboard: '/dashboard', studio: '/library', tracks: '/library', gear: '/gear',
  analytics: '/analytics', social: '/social', marketplace: '/marketplace', live: '/live',
  chat: '/chat', education: '/education', sell: '/sell', wishlist: '/wishlist',
  purchases: '/purchases', playlists: '/playlists', queue: '/queue', developer: '/developer',
  admin: '/admin', settings: '/settings',
};

export const Sidebar: React.FC<SidebarProps> = ({ currentView, onNavigate, onLogout }) => {
  const navigate = useNavigate();
  const location = useLocation();
  const { logout } = useAuthStore();
  const { sidebarOpen, setSidebarOpen } = useUIStore();

  const handleMobileNav = () => {
    if (window.innerWidth < 1024) setSidebarOpen(false);
  };

  const activeView = currentView || Object.keys(routeMap).find((key) => routeMap[key] === location.pathname) || 'dashboard';

  const handleLogout = () => {
    logout();
    navigate('/login');
    onLogout?.();
  };

  return (
    <>
      {sidebarOpen && (
        <div
          className="fixed inset-0 bg-black/60 backdrop-blur-sm lg:hidden z-[90]"
          onClick={() => setSidebarOpen(false)}
          aria-hidden="true"
        />
      )}

      <aside
        className={cn(
          'fixed left-6 bottom-6 top-20 rounded-xl flex flex-col transition-all duration-300 ease-out z-[95] overflow-hidden bg-[var(--sidebar)] backdrop-blur-md',
          sidebarOpen ? 'w-64 translate-x-0 opacity-100' : '-translate-x-full lg:translate-x-0 lg:opacity-100 lg:w-20'
        )}
      >
        {/* Header — minimal Spotify-style */}
        <div className="px-4 py-4 flex items-center gap-3 relative">
          <div className="w-8 h-8 rounded-lg bg-white/5 flex items-center justify-center flex-shrink-0">
            <Cpu className="w-4 h-4 text-muted-foreground" />
          </div>

          <div className={cn("transition-all duration-300 overflow-hidden min-w-0", sidebarOpen ? "opacity-100" : "w-0 opacity-0")}>
            <h2 className="text-sm font-semibold text-foreground truncate">
              System Hub
            </h2>
            <div className="flex items-center gap-1.5 mt-0.5">
              <span className="w-1.5 h-1.5 rounded-full bg-primary shrink-0" />
              <span className="text-xs text-muted-foreground truncate">
                Online
              </span>
            </div>
          </div>

          <Button
            variant="ghost"
            size="icon"
            onClick={() => setSidebarOpen(!sidebarOpen)}
            className={cn(
              "ml-auto text-muted-foreground hover:text-white hidden lg:flex hover:bg-white/5",
              !sidebarOpen && "absolute left-1/2 -translate-x-1/2 top-1/2 -translate-y-1/2"
            )}
          >
            {sidebarOpen ? <ChevronLeft className="w-4 h-4" /> : <ChevronRight className="w-4 h-4" />}
          </Button>
        </div>

        {/* Nav — Spotify: light section labels, clean hover */}
        <div className="flex-1 overflow-y-auto custom-scrollbar px-3 py-2 space-y-6">
          {navItems.map((group, idx) => (
            <div key={idx}>
              <h3 className={cn(
                "text-xs font-medium text-muted-foreground mb-2 px-3 transition-all duration-300",
                !sidebarOpen && "opacity-0 h-0 overflow-hidden mb-0 px-0"
              )}>
                {group.section}
              </h3>

              <div className="space-y-0.5">
                {group.items.map((item) => {
                  const route = routeMap[item.id] || '/dashboard';
                  const isActive = activeView === item.id;

                  return (
                    <Link
                      key={item.id}
                      to={route}
                      onClick={() => {
                        handleMobileNav();
                        onNavigate?.(item.id);
                      }}
                      className={cn(
                        'w-full flex items-center px-3 py-2 rounded-lg text-sm font-medium transition-colors duration-200 group relative',
                        isActive
                          ? 'bg-white/10 text-foreground'
                          : 'text-muted-foreground hover:text-foreground hover:bg-white/5',
                        !sidebarOpen && "justify-center px-0"
                      )}
                      title={!sidebarOpen ? item.label : undefined}
                    >
                      <div className={cn("flex items-center gap-3 relative z-10 min-w-0", !sidebarOpen && "justify-center")}>
                        <span className={cn(
                          'shrink-0 transition-colors duration-200',
                          isActive ? 'text-foreground' : 'text-muted-foreground group-hover:text-foreground'
                        )}>
                          {item.icon}
                        </span>

                        <span className={cn(
                          "transition-all duration-300 whitespace-nowrap truncate",
                          sidebarOpen ? "opacity-100" : "w-0 opacity-0 overflow-hidden"
                        )}>
                          {item.label}
                        </span>
                      </div>

                      {item.badge && sidebarOpen && (
                        <span className="ml-auto text-xs text-muted-foreground tabular-nums shrink-0">
                          {item.badge}
                        </span>
                      )}

                      {item.badge && !sidebarOpen && (
                        <span className="absolute top-1.5 right-1.5 w-1.5 h-1.5 rounded-full bg-primary" />
                      )}
                    </Link>
                  );
                })}
              </div>
            </div>
          ))}
        </div>

        {/* Footer */}
        <div className="p-2 border-t border-white/5">
          <Link
            to="/settings"
            onClick={() => { handleMobileNav(); onNavigate?.('settings'); }}
            className={cn(
              'flex items-center gap-3 px-3 py-2 rounded-lg text-sm transition-colors duration-200',
              activeView === 'settings' ? 'bg-white/10 text-foreground' : 'text-muted-foreground hover:text-foreground hover:bg-white/5',
              !sidebarOpen && "justify-center px-0"
            )}
          >
            <Settings className="w-4 h-4 shrink-0" />
            <span className={cn("truncate", sidebarOpen ? "opacity-100" : "w-0 opacity-0 overflow-hidden")}>Settings</span>
          </Link>

          <Button
            variant="ghost"
            onClick={handleLogout}
            className={cn(
              "w-full text-muted-foreground hover:text-destructive hover:bg-destructive/10 mt-0.5 gap-3 justify-start rounded-lg",
              !sidebarOpen && "justify-center px-0"
            )}
          >
            <LogOut className="w-4 h-4 shrink-0" />
            <span className={cn("whitespace-nowrap", sidebarOpen ? "opacity-100" : "w-0 opacity-0 overflow-hidden")}>Sign Out</span>
          </Button>
        </div>
      </aside>
    </>
  );
};
