const { useState, useEffect, useRef } = React;

const NAV_GROUPS = [
    {
        label: 'Learn',
        items: [
            { name: 'Tutorials', url: 'tutorials.html' },
            { name: 'Ethics', url: 'ethics.html' }
        ]
    },
    {
        label: 'Planning',
        items: [
            { name: 'Ephemeris', url: 'planning.html' },
            { name: 'Calendar', url: 'Calendar.html' },
            { name: 'Weather', url: 'weather.html' },
            { name: 'Itinerary', url: 'itinerary.html' }
        ]
    },
    {
        label: 'Explore',
        items: [
            { name: 'Locations', url: 'explore.html' },
            { 
                name: 'Routes', 
                url: 'routes.html',
                subItems: [
                    { name: 'Map', url: 'routes.html' },
                    { name: 'Short', url: 'walks_short.html' },
                    { name: 'Medium', url: 'walks_medium.html' },
                    { name: 'Long', url: 'walks_long.html' }
                ]
            }
        ]
    }
];

const NAV_HOME = { name: 'Home', url: 'index.html' };
const NAV_WORKSHOPS = { name: 'Workshops', url: 'workshops.html' };

const normaliseNavPath = (value) => {
    const clean = (value || '').split('#')[0].split('?')[0].split('/').pop().toLowerCase();
    return clean || 'index.html';
};

const isNavItemActive = (item, currentPath) => {
    if (normaliseNavPath(item.url) === currentPath) return true;
    if (item.subItems) {
        return item.subItems.some(sub => normaliseNavPath(sub.url) === currentPath);
    }
    return false;
};

const isNavGroupActive = (group, currentPath) => group.items.some(item => isNavItemActive(item, currentPath));

const Navbar = () => {
    const [isOpen, setIsOpen] = useState(false);
    const [activeDropdown, setActiveDropdown] = useState(null);
    const [activeSubDropdown, setActiveSubDropdown] = useState(null);
    const [expandedMobileSub, setExpandedMobileSub] = useState(null);
    const [currentPath, setCurrentPath] = useState('');
    const dropdownTimer = useRef(null);

    useEffect(() => {
        setCurrentPath(normaliseNavPath(window.location.pathname));
    }, []);

    const closeMenus = () => {
        setIsOpen(false);
        setActiveDropdown(null);
        setActiveSubDropdown(null);
        setExpandedMobileSub(null);
    };

    const handleMouseEnter = (label) => {
        if (dropdownTimer.current) clearTimeout(dropdownTimer.current);
        setActiveDropdown(label);
    };

    const handleMouseLeave = () => {
        dropdownTimer.current = setTimeout(() => {
            setActiveDropdown(null);
            setActiveSubDropdown(null);
        }, 300);
    };

    const homeActive = isNavItemActive(NAV_HOME, currentPath);
    const workshopsActive = isNavItemActive(NAV_WORKSHOPS, currentPath);

    return (
        <nav className="fixed top-0 left-0 right-0 z-[9999] bg-white/95 backdrop-blur-md border-b border-slate-200 shadow-sm">
            <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
                <div className="flex justify-between items-center h-16">
                    {/* Logo */}
                    <div className="flex-shrink-0 flex items-center">
                        <a href="index.html" className="flex items-center gap-2 group">
                            <div className="w-8 h-8 bg-slate-900 rounded-lg flex items-center justify-center group-hover:bg-slate-800 transition-colors shadow-md">
                                <Icon name="camera" size={18} className="text-white" />
                            </div>
                            <span className="font-black text-lg tracking-tight text-slate-900">NorthernPixl</span>
                        </a>
                    </div>

                    {/* Desktop Menu */}
                    <div className="hidden md:flex items-center space-x-1">
                        <a
                            href={NAV_HOME.url}
                            className={`px-4 py-2 text-[11px] font-black uppercase tracking-widest rounded-lg transition-colors ${
                                homeActive ? 'bg-slate-100 text-slate-900' : 'text-slate-500 hover:bg-slate-50 hover:text-slate-900'
                            }`}
                        >
                            {NAV_HOME.name}
                        </a>

                        {NAV_GROUPS.map((group, idx) => {
                            const isActive = isNavGroupActive(group, currentPath);
                            const isDropdownOpen = activeDropdown === group.label;

                            return (
                                <div
                                    key={idx}
                                    className="relative"
                                    onMouseEnter={() => handleMouseEnter(group.label)}
                                    onMouseLeave={handleMouseLeave}
                                >
                                    <button
                                        onClick={() => setActiveDropdown(isDropdownOpen ? null : group.label)}
                                        className={`flex items-center px-4 py-2 text-[11px] font-black uppercase tracking-widest rounded-lg transition-colors ${
                                            isActive ? 'bg-slate-100 text-slate-900' : 'text-slate-500 hover:bg-slate-50 hover:text-slate-900'
                                        }`}
                                    >
                                        {group.label}
                                        <Icon name="chevronDown" size={12} className={`ml-1.5 transition-transform duration-200 ${isDropdownOpen ? 'rotate-180' : ''}`} />
                                    </button>

                                    {/* Primary Dropdown Menu */}
                                    {isDropdownOpen && (
                                        <div className="absolute top-full left-0 pt-2 w-48">
                                            <div className="bg-white rounded-xl shadow-xl border border-slate-100 overflow-hidden py-1">
                                                {group.items.map((item, itemIdx) => {
                                                    const itemActive = isNavItemActive(item, currentPath);
                                                    const hasSub = !!item.subItems;
                                                    const isSubOpen = activeSubDropdown === item.name;

                                                    return (
                                                        <div 
                                                            key={itemIdx} 
                                                            className="relative"
                                                            onMouseEnter={() => hasSub && setActiveSubDropdown(item.name)}
                                                            onMouseLeave={() => hasSub && setActiveSubDropdown(null)}
                                                        >
                                                            {hasSub ? (
                                                                <button
                                                                    onClick={(e) => {
                                                                        e.preventDefault();
                                                                        setActiveSubDropdown(isSubOpen ? null : item.name);
                                                                    }}
                                                                    className={`w-full flex items-center justify-between px-4 py-2.5 text-[11px] font-black uppercase tracking-widest cursor-pointer transition-colors ${
                                                                        itemActive || isSubOpen ? 'bg-slate-50 text-slate-900' : 'text-slate-500 hover:bg-slate-50 hover:text-slate-900'
                                                                    }`}
                                                                >
                                                                    {item.name}
                                                                    <Icon name="chevronDown" size={12} className={`ml-1 transition-transform duration-200 ${isSubOpen ? 'rotate-180' : ''}`} />
                                                                </button>
                                                            ) : (
                                                                <a
                                                                    href={item.url}
                                                                    onClick={closeMenus}
                                                                    className={`block px-4 py-2.5 text-[11px] font-black uppercase tracking-widest transition-colors ${
                                                                        itemActive ? 'bg-slate-50 text-slate-900' : 'text-slate-500 hover:bg-slate-50 hover:text-slate-900'
                                                                    }`}
                                                                >
                                                                    {item.name}
                                                                </a>
                                                            )}

                                                            {/* Nested Sub-Dropdown (Expands downwards inline) */}
                                                            {hasSub && isSubOpen && (
                                                                <div className="bg-slate-50/80 border-t border-slate-100 py-1">
                                                                    {item.subItems.map((sub, subIdx) => {
                                                                        const subActive = isNavItemActive(sub, currentPath);
                                                                        return (
                                                                            <a
                                                                                key={subIdx}
                                                                                href={sub.url}
                                                                                onClick={closeMenus}
                                                                                className={`block px-4 py-2 pl-6 text-[11px] font-black uppercase tracking-widest transition-colors ${
                                                                                    subActive ? 'text-slate-900 bg-slate-100' : 'text-slate-500 hover:bg-slate-100 hover:text-slate-900'
                                                                                }`}
                                                                            >
                                                                                {sub.name}
                                                                            </a>
                                                                        );
                                                                    })}
                                                                </div>
                                                            )}
                                                        </div>
                                                    );
                                                })}
                                            </div>
                                        </div>
                                    )}
                                </div>
                            );
                        })}

                        <a
                            href={NAV_WORKSHOPS.url}
                            className={`px-4 py-2 text-[11px] font-black uppercase tracking-widest rounded-lg transition-colors ${
                                workshopsActive ? 'bg-slate-100 text-slate-900' : 'text-slate-500 hover:bg-slate-50 hover:text-slate-900'
                            }`}
                        >
                            {NAV_WORKSHOPS.name}
                        </a>
                    </div>

                    {/* Mobile Menu Button */}
                    <div className="md:hidden flex items-center">
                        <button
                            onClick={() => setIsOpen(!isOpen)}
                            className="p-2 rounded-lg text-slate-500 hover:bg-slate-100 transition-colors"
                        >
                            <Icon name={isOpen ? "x" : "menu"} size={24} />
                        </button>
                    </div>
                </div>
            </div>

            {/* Mobile Menu */}
            {isOpen && (
                <div className="md:hidden bg-white border-t border-slate-100 h-[calc(100vh-64px)] overflow-y-auto shadow-inner">
                    <div className="px-4 py-4 space-y-1">
                        <a
                            href={NAV_HOME.url}
                            onClick={closeMenus}
                            className={`block px-4 py-3 text-[11px] font-black uppercase tracking-widest rounded-lg ${homeActive ? 'bg-slate-100 text-slate-900' : 'text-slate-500 hover:bg-slate-50 hover:text-slate-900 transition-colors'}`}
                        >
                            {NAV_HOME.name}
                        </a>

                        {NAV_GROUPS.map((group, idx) => {
                            const isActive = isNavGroupActive(group, currentPath);
                            const isDropdownOpen = activeDropdown === group.label;

                            return (
                                <div key={idx} className="space-y-1">
                                    <button
                                        onClick={() => setActiveDropdown(isDropdownOpen ? null : group.label)}
                                        className={`w-full flex items-center justify-between px-4 py-3 text-[11px] font-black uppercase tracking-widest rounded-lg transition-colors ${
                                            isActive ? 'bg-slate-100 text-slate-900' : 'text-slate-500 hover:bg-slate-50 hover:text-slate-900'
                                        }`}
                                    >
                                        {group.label}
                                        <Icon name="chevronDown" size={14} className={`transition-transform duration-200 ${isDropdownOpen ? 'rotate-180' : ''}`} />
                                    </button>

                                    {isDropdownOpen && (
                                        <div className="pl-4 pr-2 space-y-1 pb-2">
                                            {group.items.map((item, itemIdx) => {
                                                const itemActive = isNavItemActive(item, currentPath);
                                                const hasSub = !!item.subItems;
                                                const isSubExpanded = expandedMobileSub === item.name;

                                                return (
                                                    <div key={itemIdx} className="space-y-1">
                                                        {hasSub ? (
                                                            <button
                                                                onClick={() => setExpandedMobileSub(isSubExpanded ? null : item.name)}
                                                                className={`w-full flex items-center justify-between px-4 py-2.5 text-[11px] font-black uppercase tracking-widest rounded-lg ${
                                                                    itemActive ? 'bg-slate-100 text-slate-900' : 'text-slate-400 hover:bg-slate-50 hover:text-slate-900 transition-colors'
                                                                }`}
                                                            >
                                                                {item.name}
                                                                <Icon name="chevronDown" size={12} className={`transition-transform duration-200 ${isSubExpanded ? 'rotate-180' : ''}`} />
                                                            </button>
                                                        ) : (
                                                            <a
                                                                href={item.url}
                                                                onClick={closeMenus}
                                                                className={`block px-4 py-2.5 text-[11px] font-black uppercase tracking-widest rounded-lg ${
                                                                    itemActive ? 'bg-slate-100 text-slate-900' : 'text-slate-400 hover:bg-slate-50 hover:text-slate-900 transition-colors'
                                                                }`}
                                                            >
                                                                {item.name}
                                                            </a>
                                                        )}

                                                        {/* Mobile Nested Sub-items (Accordion style) */}
                                                        {hasSub && isSubExpanded && (
                                                            <div className="pl-4 pr-2 space-y-1 pb-1">
                                                                {item.subItems.map((sub, subIdx) => {
                                                                    const subActive = isNavItemActive(sub, currentPath);
                                                                    return (
                                                                        <a
                                                                            key={subIdx}
                                                                            href={sub.url}
                                                                            onClick={closeMenus}
                                                                            className={`block px-4 py-2 text-[11px] font-black uppercase tracking-widest rounded-lg ${
                                                                                subActive ? 'bg-slate-100 text-slate-900' : 'text-slate-400 hover:bg-slate-50 hover:text-slate-900 transition-colors'
                                                                            }`}
                                                                        >
                                                                            {sub.name}
                                                                        </a>
                                                                    );
                                                                })}
                                                            </div>
                                                        )}
                                                    </div>
                                                );
                                            })}
                                        </div>
                                    )}
                                </div>
                            );
                        })}

                        <a
                            href={NAV_WORKSHOPS.url}
                            onClick={closeMenus}
                            className={`block px-4 py-3 text-[11px] font-black uppercase tracking-widest rounded-lg border-t border-slate-100 mt-1 ${
                                workshopsActive ? 'bg-slate-100 text-slate-900' : 'text-slate-500 hover:bg-slate-50 hover:text-slate-900 transition-colors'
                            }`}
                        >
                            {NAV_WORKSHOPS.name}
                        </a>
                    </div>
                </div>
            )}
        </nav>
    );
};
