'use client';

import { cn } from '@/lib/utils';
import type { SharedData } from '@/types';
import { router, usePage } from '@inertiajs/react';
import { memo, useCallback, useEffect, useState } from 'react';

interface NavigationBarProps {
    appName?: string;
    appLogoUrl?: string | null;
    appLogoWebP?: string | null;
    appFont?: string;
    heroUseLogo?: boolean;
}

const allNavItems = [
    { label: 'Home', target: 'hero', href: '/' },
    { label: 'News', target: 'news', href: '/#news' },
    { label: 'Top Up', target: 'donations', href: '/#donations' },
    { label: 'Download', target: 'download', href: '/#download' },
    { label: 'Event', target: 'events', href: '/#events', requiresEventEnabled: true },
];

// Parse app name for styled logo text (e.g., "MostWanted" -> Most + W + anted)
const parseAppName = (name: string) => {
    if (!name) return { part1: 'Game', highlight: 'S', part2: 'erver' };

    // Try to find a good split point
    const mid = Math.ceil(name.length / 2);
    return {
        part1: name.slice(0, mid - 1),
        highlight: name.slice(mid - 1, mid),
        part2: name.slice(mid),
    };
};

export const NavigationBar = memo(function NavigationBar({ appName, appLogoUrl, appLogoWebP: _appLogoWebP, appFont: _appFont, heroUseLogo: _heroUseLogo }: NavigationBarProps) {
    const [open, setOpen] = useState(false);
    const [scrolled, setScrolled] = useState(false);
    const { auth, socialMedia } = usePage<SharedData>().props;
    const isLoggedIn = auth?.user != null;
    const menuEventEnabled = (usePage().props as any).services?.menu_event_enabled ?? true;

    const navItems = allNavItems.filter((item) => !item.requiresEventEnabled || menuEventEnabled);

    const logoParts = parseAppName(appName || 'Server');

    // Handle scroll
    useEffect(() => {
        const handleScroll = () => {
            setScrolled(window.scrollY > 50);
        };
        window.addEventListener('scroll', handleScroll);
        return () => window.removeEventListener('scroll', handleScroll);
    }, []);

    // Handle body scroll lock
    useEffect(() => {
        if (open) {
            document.body.style.overflow = 'hidden';
            document.documentElement.style.overflow = 'hidden';
        } else {
            document.body.style.removeProperty('overflow');
            document.documentElement.style.removeProperty('overflow');
        }
        return () => {
            document.body.style.removeProperty('overflow');
            document.documentElement.style.removeProperty('overflow');
        };
    }, [open]);

    const toggleMenu = useCallback(() => {
        setOpen((prev) => !prev);
    }, []);

    const closeMenu = useCallback(() => {
        setOpen(false);
    }, []);

    const scrollToTarget = useCallback(
        (target: string) => {
            const el = document.getElementById(target);
            if (el) {
                el.scrollIntoView({ behavior: 'smooth' });
                closeMenu();
            } else {
                if (window.location.pathname !== '/') {
                    router.visit('/#' + target, { preserveState: false });
                } else {
                    window.scrollTo({ top: 0, behavior: 'smooth' });
                }
                closeMenu();
            }
        },
        [closeMenu],
    );

    return (
        <>
            <header
                className={cn(
                    'fixed top-0 right-0 left-0 z-50 transition-all duration-300',
                    scrolled || open ? 'bg-[rgba(7,0,18,0.98)]' : 'bg-gradient-to-b from-[rgba(7,0,18,0.98)] to-[rgba(28,8,54,0.78)]',
                )}
                style={{
                    borderBottom: '1px solid rgba(168,85,247,0.3)',
                    boxShadow: scrolled ? '0 2px 30px rgba(88,28,135,0.35)' : 'none',
                }}
            >
                <nav className="mx-auto flex h-16 w-full max-w-7xl items-center justify-between px-4 lg:px-8">
                    {/* Logo */}
                    <a href="/" className="group flex items-center gap-3">
                        {appLogoUrl ? (
                            <img
                                src={appLogoUrl}
                                alt={appName || 'Logo'}
                                className="h-8 w-auto object-contain sm:h-10"
                                style={{ filter: 'drop-shadow(0 0 14px rgba(168,85,247,0.45))' }}
                            />
                        ) : (
                            <div
                                className="flex h-8 w-8 items-center justify-center rounded-full border-2 sm:h-10 sm:w-10"
                                style={{
                                    borderColor: '#a855f7',
                                    boxShadow: '0 0 16px rgba(168,85,247,0.45), inset 0 0 20px rgba(168,85,247,0.14)',
                                }}
                            >
                                <span className="text-base font-bold text-[#d8b4fe] sm:text-lg">{logoParts.highlight}</span>
                            </div>
                        )}
                        <span className="hidden text-lg font-bold tracking-wider sm:block" style={{ fontFamily: 'Cinzel Decorative, serif' }}>
                            <span style={{ color: '#ede9fe' }}>{logoParts.part1}</span>
                            <span
                                style={{
                                    color: '#d946ef',
                                    textShadow: '0 0 15px rgba(217,70,239,0.8)',
                                }}
                            >
                                {logoParts.highlight}
                            </span>
                            <span style={{ color: '#c4b5fd', textShadow: '0 0 15px rgba(168,85,247,0.5)' }}>{logoParts.part2}</span>
                        </span>
                    </a>

                    {/* Desktop Navigation */}
                    <div className="hidden items-center lg:flex">
                        <ul className="flex items-center gap-0">
                            {navItems.map((item, index) => (
                                <li key={item.label} className="flex items-center">
                                    <button
                                        onClick={() => scrollToTarget(item.target)}
                                        className="group relative px-4 py-2 text-xs font-semibold tracking-wider uppercase transition-colors hover:text-[#f5d0fe]"
                                        style={{
                                            color: '#a78bfa',
                                            fontFamily: 'Rajdhani, sans-serif',
                                            letterSpacing: '0.12em',
                                        }}
                                    >
                                        {item.label}
                                        <span
                                            className="absolute bottom-0 left-1/2 h-px w-0 -translate-x-1/2 transition-all duration-300 group-hover:w-4/5"
                                            style={{ background: '#d946ef' }}
                                        />
                                    </button>
                                    {index < navItems.length - 1 && (
                                        <span className="mx-1 text-xs" style={{ color: 'rgba(168,85,247,0.45)' }}>
                                            ◆
                                        </span>
                                    )}
                                </li>
                            ))}
                        </ul>
                    </div>

                    {/* Right Side Actions */}
                    <div className="hidden items-center gap-4 lg:flex">
                        {/* Social Icons */}
                        <div className="flex items-center gap-2">
                            {socialMedia?.discord?.enabled && (
                                <a
                                    href={socialMedia.discord.url}
                                    target="_blank"
                                    rel="noopener noreferrer"
                                    className="flex h-8 w-8 items-center justify-center rounded transition-colors"
                                    style={{ color: '#a78bfa' }}
                                    onMouseEnter={(e) => (e.currentTarget.style.color = '#5865F2')}
                                    onMouseLeave={(e) => (e.currentTarget.style.color = '#a78bfa')}
                                >
                                    <svg className="h-5 w-5" fill="currentColor" viewBox="0 0 24 24">
                                        <path d="M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189z" />
                                    </svg>
                                </a>
                            )}
                            {socialMedia?.tiktok?.enabled && (
                                <a
                                    href={socialMedia.tiktok.url}
                                    target="_blank"
                                    rel="noopener noreferrer"
                                    className="flex h-8 w-8 items-center justify-center rounded transition-colors"
                                    style={{ color: '#a78bfa' }}
                                    onMouseEnter={(e) => (e.currentTarget.style.color = '#d946ef')}
                                    onMouseLeave={(e) => (e.currentTarget.style.color = '#a78bfa')}
                                >
                                    <svg className="h-5 w-5" fill="currentColor" viewBox="0 0 24 24">
                                        <path d="M19.59 6.69a4.83 4.83 0 01-3.77-4.25V2h-3.45v13.67a2.89 2.89 0 01-2.88 2.5 2.89 2.89 0 01-2.89-2.89 2.89 2.89 0 012.89-2.89c.28 0 .54.04.79.1v-3.5a6.37 6.37 0 00-.79-.05A6.34 6.34 0 003.15 15.2a6.34 6.34 0 006.34 6.34 6.34 6.34 0 006.34-6.34V8.85a8.16 8.16 0 004.76 1.52V6.93a4.85 4.85 0 01-1-.24z" />
                                    </svg>
                                </a>
                            )}
                        </div>

                        {/* Divider */}
                        <div className="h-6 w-px" style={{ background: 'rgba(168,85,247,0.35)' }} />

                        {/* Auth Buttons */}
                        {isLoggedIn ? (
                            <a
                                href="/dashboard"
                                className="rounded px-5 py-2 text-sm font-bold tracking-wider uppercase transition-all hover:shadow-lg"
                                style={{
                                    background: 'linear-gradient(135deg, #7e22ce 0%, #d946ef 50%, #a855f7 100%)',
                                    color: '#ffffff',
                                    fontFamily: 'Rajdhani, sans-serif',
                                    letterSpacing: '0.1em',
                                    boxShadow: '0 2px 18px rgba(168,85,247,0.45)',
                                }}
                            >
                                Dashboard
                            </a>
                        ) : (
                            <div className="flex items-center gap-2">
                                <a
                                    href="/login"
                                    className="rounded border px-4 py-2 font-semibold tracking-wider uppercase transition-all hover:bg-[rgba(168,85,247,0.08)]"
                                    style={{
                                        color: '#ddd6fe',
                                        borderColor: 'rgba(168,85,247,0.28)',
                                        fontFamily: 'Rajdhani, sans-serif',
                                        letterSpacing: '0.1em',
                                        fontSize: '12px',
                                    }}
                                >
                                    Login
                                </a>
                                <a
                                    href="/register"
                                    className="rounded px-5 py-2 font-bold tracking-wider uppercase transition-all hover:-translate-y-0.5 hover:shadow-lg"
                                    style={{
                                        background: 'linear-gradient(135deg, #7e22ce 0%, #d946ef 50%, #a855f7 100%)',
                                        color: '#ffffff',
                                        fontFamily: 'Rajdhani, sans-serif',
                                        letterSpacing: '0.1em',
                                        boxShadow: '0 2px 18px rgba(168,85,247,0.45)',
                                        fontSize: '12px',
                                    }}
                                >
                                    Register
                                </a>
                            </div>
                        )}
                    </div>

                    {/* Mobile Menu Button */}
                    <button onClick={toggleMenu} className="flex flex-col gap-1.5 p-2 lg:hidden" aria-label={open ? 'Close menu' : 'Open menu'}>
                        <span
                            className="h-0.5 w-6 transition-all"
                            style={{
                                background: '#d8b4fe',
                                transform: open ? 'rotate(45deg) translate(4px, 4px)' : 'none',
                            }}
                        />
                        <span
                            className="h-0.5 w-6 transition-all"
                            style={{
                                background: '#d8b4fe',
                                opacity: open ? 0 : 1,
                            }}
                        />
                        <span
                            className="h-0.5 w-6 transition-all"
                            style={{
                                background: '#d8b4fe',
                                transform: open ? 'rotate(-45deg) translate(4px, -4px)' : 'none',
                            }}
                        />
                    </button>
                </nav>
            </header>

            {/* Mobile Drawer */}
            <div
                className={cn(
                    'fixed inset-0 z-40 transition-opacity duration-300 lg:hidden',
                    open ? 'pointer-events-auto opacity-100' : 'pointer-events-none opacity-0',
                )}
            >
                {/* Backdrop */}
                <div className="absolute inset-0 bg-black/70" onClick={closeMenu} />

                {/* Panel */}
                <div
                    className={cn('absolute top-16 right-0 left-0 max-h-[calc(100vh-4rem)] overflow-y-auto transition-transform duration-300', open ? 'translate-y-0' : '-translate-y-full')}
                    style={{
                        background: 'rgba(7,0,18,0.98)',
                        borderBottom: '1px solid rgba(168,85,247,0.3)',
                    }}
                >
                    <div className="space-y-4 p-6">
                        {navItems.map((item) => (
                            <button
                                key={item.label}
                                onClick={() => scrollToTarget(item.target)}
                                className="block w-full border-b py-3 text-left text-sm font-semibold tracking-wider uppercase transition-colors hover:text-[#f5d0fe]"
                                style={{
                                    color: '#ddd6fe',
                                    borderColor: 'rgba(168,85,247,0.18)',
                                    fontFamily: 'Rajdhani, sans-serif',
                                    letterSpacing: '0.1em',
                                }}
                            >
                                {item.label}
                            </button>
                        ))}

                        {/* Mobile Actions */}
                        <div className="space-y-3 pt-4">
                            {isLoggedIn ? (
                                <a
                                    href="/dashboard"
                                    onClick={closeMenu}
                                    className="block w-full rounded py-3 text-center text-sm font-bold tracking-wider uppercase"
                                    style={{
                                        background: 'linear-gradient(135deg, #7e22ce 0%, #d946ef 50%, #a855f7 100%)',
                                        color: '#ffffff',
                                        fontFamily: 'Rajdhani, sans-serif',
                                    }}
                                >
                                    Dashboard
                                </a>
                            ) : (
                                <div className="grid grid-cols-2 gap-3">
                                    <a
                                        href="/login"
                                        onClick={closeMenu}
                                        className="block w-full rounded border py-3 text-center text-sm font-semibold tracking-wider uppercase"
                                        style={{
                                            color: '#ddd6fe',
                                            borderColor: 'rgba(168,85,247,0.4)',
                                            background: 'rgba(168,85,247,0.08)',
                                            fontFamily: 'Rajdhani, sans-serif',
                                        }}
                                    >
                                        Login
                                    </a>
                                    <a
                                        href="/register"
                                        onClick={closeMenu}
                                        className="block rounded py-3 text-center text-sm font-bold tracking-wider uppercase"
                                        style={{
                                            background: 'linear-gradient(135deg, #7e22ce 0%, #d946ef 50%, #a855f7 100%)',
                                            color: '#ffffff',
                                            fontFamily: 'Rajdhani, sans-serif',
                                        }}
                                    >
                                        Register
                                    </a>
                                </div>
                            )}
                        </div>
                    </div>
                </div>
            </div>
        </>
    );
});
