/**
 * Navigation Component
 * Top header nav for desktop; bottom tab bar for mobile (≤640px).
 */

'use client';

import Link from 'next/link';
import { usePathname } from 'next/navigation';
import { useComparison } from '@/hooks/useComparison';
import styles from './Navigation.module.css';

type IconProps = { className?: string };

const SearchIcon = ({ className }: IconProps) => (
  <svg className={className} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
    <circle cx="11" cy="11" r="7" />
    <path d="m20 20-3.5-3.5" />
  </svg>
);

const CompareIcon = ({ className }: IconProps) => (
  <svg className={className} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
    <path d="M4 7h13l-3-3" />
    <path d="M20 17H7l3 3" />
  </svg>
);

const RankingsIcon = ({ className }: IconProps) => (
  <svg className={className} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
    <path d="M7 21V11" />
    <path d="M12 21V4" />
    <path d="M17 21v-7" />
  </svg>
);

const AdmissionsIcon = ({ className }: IconProps) => (
  <svg className={className} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
    <rect x="3" y="5" width="18" height="16" rx="2" />
    <path d="M3 10h18M8 3v4M16 3v4" />
  </svg>
);

export function Navigation() {
  const pathname = usePathname();
  const { selectedSchools } = useComparison();

  const isActive = (path: string) => {
    if (path === '/') return pathname === '/';
    return pathname.startsWith(path);
  };

  const items = [
    { href: '/', label: 'Search', Icon: SearchIcon },
    { href: '/compare', label: 'Compare', Icon: CompareIcon },
    { href: '/rankings', label: 'Rankings', Icon: RankingsIcon },
    { href: '/admissions', label: 'Admissions', Icon: AdmissionsIcon },
  ] as const;

  return (
    <>
      <header className={styles.header}>
        <div className={styles.container}>
          <Link href="/" className={styles.logo} aria-label="SchoolCompare home">
            <span className={styles.logoIcon}>
              <svg viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                <circle cx="20" cy="20" r="18" stroke="currentColor" strokeWidth="2" />
                <path d="M20 6L20 34M8 14L32 14M6 20L34 20M8 26L32 26" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" />
                <circle cx="20" cy="20" r="3" fill="currentColor" />
              </svg>
            </span>
            <span className={styles.logoText}>SchoolCompare</span>
          </Link>

          <nav className={styles.nav} aria-label="Main navigation">
            {items.map(({ href, label }) => {
              const active = isActive(href);
              const showBadge = href === '/compare' && selectedSchools.length > 0;
              return (
                <Link
                  key={href}
                  href={href}
                  className={active ? `${styles.navLink} ${styles.active}` : styles.navLink}
                  aria-current={active ? 'page' : undefined}
                >
                  {label}
                  {showBadge && (
                    <span key={selectedSchools.length} className={styles.badge}>
                      {selectedSchools.length}
                    </span>
                  )}
                </Link>
              );
            })}
          </nav>
        </div>
      </header>

      <nav className={styles.bottomBar} aria-label="Main navigation">
        {items.map(({ href, label, Icon }) => {
          const active = isActive(href);
          const showBadge = href === '/compare' && selectedSchools.length > 0;
          return (
            <Link
              key={href}
              href={href}
              className={active ? `${styles.tab} ${styles.tabActive}` : styles.tab}
              aria-current={active ? 'page' : undefined}
            >
              <span className={styles.tabIconWrap}>
                <Icon className={styles.tabIcon} />
                {showBadge && (
                  <span key={selectedSchools.length} className={styles.tabBadge} aria-label={`${selectedSchools.length} selected`}>
                    {selectedSchools.length}
                  </span>
                )}
              </span>
              <span className={styles.tabLabel}>{label}</span>
            </Link>
          );
        })}
      </nav>
    </>
  );
}
