// Shared: Logo mark, Mega-menu Nav, Footer, tiny helpers

const QdeckMark = ({ size = 26, navyFill = "#0B1F33", flagFill = "#30A3D9" }) => (
  <svg width={size} height={size} viewBox="0 0 200 200" aria-hidden="true">
    <path d="M95.5413 31.1287C-1.9671 36.777 11.5391 181.266 110.909 169.296C111.342 169.144 111.082 168.796 110.498 168.144C109.415 166.993 107.662 165.081 106.385 163.973C103.03 160.519 76.9271 134.602 68.0312 125.391C47.2308 103.623 64.2434 62.4552 94.221 61.8904C121.861 59.4572 142.51 88.6331 132.813 113.594C132.25 115.137 132.51 115.376 133.462 116.266C137.51 120.329 151.687 134.558 154.241 137.122C186.167 96.0628 148.527 27.9352 95.9742 31.1069H95.5197L95.5413 31.1287Z" fill={navyFill}/>
    <path d="M171 170H130.084L95 135H135.895L171 170Z" fill={flagFill}/>
  </svg>
);

function Arrow({ size = 14 }) {
  return (
    <svg width={size} height={size} viewBox="0 0 16 16" fill="none" aria-hidden="true" className="arrow">
      <path d="M2 8h11M9 4l4 4-4 4" stroke="currentColor" strokeWidth="1.4" strokeLinecap="round" strokeLinejoin="round"/>
    </svg>
  );
}

function Chevron({ size = 16 }) {
  return (
    <svg width={size} height={size} viewBox="0 0 16 16" fill="none" aria-hidden="true" className="chev">
      <path d="M6 4l4 4-4 4" stroke="currentColor" strokeWidth="1.4" strokeLinecap="round" strokeLinejoin="round"/>
    </svg>
  );
}

function HamburgerIcon({ open }) {
  const lineProps = { stroke: 'currentColor', strokeWidth: '1.5', strokeLinecap: 'round' };
  const dur = '260ms cubic-bezier(0.2,0.8,0.2,1)';
  return (
    <svg width="22" height="22" viewBox="0 0 22 22" fill="none" aria-hidden="true">
      <line x1="2" y1="11" x2="20" y2="11" {...lineProps}
        style={{ transformOrigin: '11px 11px', transform: open ? 'rotate(45deg)' : 'translateY(-5px)', transition: `transform ${dur}` }} />
      <line x1="2" y1="11" x2="20" y2="11" {...lineProps}
        style={{ opacity: open ? 0 : 1, transition: 'opacity 180ms ease' }} />
      <line x1="2" y1="11" x2="20" y2="11" {...lineProps}
        style={{ transformOrigin: '11px 11px', transform: open ? 'rotate(-45deg)' : 'translateY(5px)', transition: `transform ${dur}` }} />
    </svg>
  );
}

// ─── Market data ──────────────────────────────────────────────────────────────

const MARKETS = [
  {
    id: 'foundations',
    name: 'Foundations',
    sub: 'Private & community',
    route: 'foundations',
    desc: 'AI, strategy, and technology for independent and community foundations.',
    services: [
      { label: 'AI Adoption',               desc: 'Helping foundations adopt AI thoughtfully — from informal use to coordinated organizational practice.', route: 'foundations-ai' },
      { label: 'Strategy & Planning',       desc: 'Strategic counsel for the decisions that don\'t have easy answers.',                                    route: 'foundations-strategy' },
      { label: 'Technology & Data Systems', desc: 'Data infrastructure, grants systems, and custom tooling for foundation operations.',                    route: 'foundations-technology' },
    ],
  },
  {
    id: 'higher-ed',
    name: 'Higher Education',
    sub: 'Universities & colleges',
    route: 'higher-ed',
    desc: 'AI, strategy, and technology for Colleges, Universities, and Academic Centers',
    services: [
      { label: 'AI & Institutional Intelligence', desc: 'Helping colleges and universities move from AI adoption to genuine institutional intelligence.', route: 'higher-ed-intelligence' },
      { label: 'Strategy & Planning',             desc: 'Strategic planning and advisory support for academic centers and initiatives.',                  route: 'higher-ed-strategy' },
      { label: 'Digital Infrastructure',          desc: 'Digital systems, web infrastructure, and custom tooling for complex institutions.',              route: 'higher-ed-digital' },
    ],
  },
  {
    id: 'business',
    name: 'Business',
    sub: 'Private sector',
    route: 'business',
    desc: 'AI, automation, and digital infrastructure for businesses ready to work differently.',
    services: [
      { label: 'AI & Automation',       desc: 'Custom tooling and workflow automation for real business operations.',                                                route: 'business-ai' },
      { label: 'Digital Infrastructure', desc: 'Websites, tools, and systems built to scale with your business.',                                                    route: 'business-digital' },
      { label: 'Operational Support',    desc: 'Fractional capacity, ongoing technical support, and hands-on partnership for businesses that want more than a vendor.', route: 'business-support' },
    ],
  },
  {
    id: 'nonprofits',
    name: 'Non-Profits',
    sub: 'High-impact organizations',
    route: 'nonprofits',
    desc: 'AI, strategy, and technology for high-impact nonprofits.',
    services: [
      { label: 'AI Adoption',            desc: 'From informal AI use to organization-wide practice — built around your mission and constraints.', route: 'nonprofits-ai' },
      { label: 'Strategy & Planning',    desc: 'Strategic counsel for complex organizational decisions and moments of change.',                   route: 'nonprofits-strategy' },
      { label: 'Digital Infrastructure', desc: 'Websites, CMS, and custom tooling for operationally complex nonprofits.',                        route: 'nonprofits-digital' },
    ],
  },
];

// ─── Panel: What We Do ────────────────────────────────────────────────────────

function WhatWeDoPanel({ setRoute, close, activeMarket, setActiveMarket }) {
  const market = MARKETS.find(m => m.id === activeMarket) || MARKETS[0];
  return (
    <div className="q-mega-panel-inner">
      <div className="q-mega-wwdo">

        {/* Left column — markets */}
        <div className="q-mega-markets">
          <div className="q-mega-col-label">Who we work with</div>
          {MARKETS.map(m => (
            <div
              key={m.id}
              className={`q-mega-market-item${activeMarket === m.id ? ' active' : ''}`}
              onMouseEnter={() => setActiveMarket(m.id)}
              onClick={() => setActiveMarket(m.id)}
            >
              <div>
                <div className="q-mega-market-name">{m.name}</div>
                <div className="q-mega-market-sub">{m.sub}</div>
              </div>
              <span className="q-mega-market-chev">›</span>
            </div>
          ))}
        </div>

        {/* Right column — market detail */}
        <div className="q-mega-market-detail">
          <div className="q-mega-overview-card" onClick={() => { setRoute(market.route); close(); }}>
            <div>
              <div className="q-mega-overview-eyebrow">Overview</div>
              <div className="q-mega-overview-title">{market.name}</div>
              <div className="q-mega-overview-desc">{market.desc}</div>
            </div>
            <span className="q-mega-overview-arrow">›</span>
          </div>

          <div className="q-mega-services-label">Practice areas for {market.name}</div>
          <div className="q-mega-services">
            {market.services.map((svc, i) => (
              <div key={i} className="q-mega-service-item" onClick={() => { setRoute(svc.route); close(); }}>
                <div className="q-mega-svc-content">
                  <div className="q-mega-svc-label">{svc.label}</div>
                  <div className="q-mega-svc-desc">{svc.desc}</div>
                </div>
                <span className="q-mega-svc-arrow">›</span>
              </div>
            ))}
          </div>
        </div>
      </div>

      <div className="q-mega-footer-strip">
        <span className="q-mega-footer-text">Not sure where to start? Most engagements begin with an Initial Evaluation.</span>
        <a href="mailto:info@quarterdeck.io" className="q-mega-footer-cta" onClick={close}>Start a conversation ›</a>
      </div>
    </div>
  );
}

// ─── Panel: Work ──────────────────────────────────────────────────────────────

const FEATURED_CASES = [
  {
    tag: 'Higher Education · Technology',
    title: 'New England Conservatory',
    desc: 'Full digital transformation for a leading conservatory — CASE Circle of Excellence Award winner.',
    thumb: 'assets/nec-hero.jpg',
    caseId: 'nec',
  },
  {
    tag: 'Business · AI & Automation',
    title: 'Revere Auctions',
    desc: 'Long-term technical partnership: from ground-up website rebuild to custom AI tools for item identification and processing.',
    thumb: 'assets/Revere%20-%20Case%20Study%20Hero%20Image.jpg',
    thumbPosition: 'center 30%',
    caseId: 'revere',
  },
  {
    tag: 'Foundations · Strategy',
    title: 'Hazelden Betty Ford Foundation',
    desc: 'Reimagining lifelong recovery and alumni engagement for one of the most trusted names in addiction treatment.',
    thumb: 'assets/hazelden-hero.jpg',
    caseId: 'hazelden',
  },
];

function WorkPanel({ setRoute, close }) {
  const goCase = (caseId) => {
    setRoute('case', caseId);
    close();
  };
  return (
    <div className="q-mega-panel-inner">
      <div className="q-mega-work-header">
        <span className="q-mega-col-label">Featured work</span>
        <a className="q-mega-all-link" onClick={() => { setRoute('work'); close(); }}>View all work ›</a>
      </div>
      <div className="q-mega-cases">
        {FEATURED_CASES.map((c, i) => (
          <div key={i} className="q-mega-case-card" onClick={() => goCase(c.caseId)}>
            {c.thumb && <div className="q-mega-case-thumb" style={{ backgroundImage: `url(${c.thumb})`, backgroundPosition: c.thumbPosition || 'center' }} />}
            <div className="q-mega-case-body">
              <div className="q-mega-case-tag">{c.tag}</div>
              <div className="q-mega-case-title">{c.title}</div>
              <div className="q-mega-case-desc">{c.desc}</div>
            </div>
          </div>
        ))}
      </div>
    </div>
  );
}

// ─── Panel: Insights ──────────────────────────────────────────────────────────

// Structured for easy swap to dynamic MDX content later
const INSIGHTS_ITEMS = [
  { tag: 'Field Guide · Foundations', title: 'AI Field Guide for Foundation Leaders: CEO & Executive Director Edition', desc: 'A practical guide to evaluating, adopting, and sustaining AI. Written for foundation CEOs and executive directors who need clarity, not hype.', date: 'May 2026' },
];

function InsightsPanel({ setRoute, close }) {
  return (
    <div className="q-mega-panel-inner">
      <div className="q-mega-two-col">
        <div>
          <div className="q-mega-col-label">Latest</div>
          {INSIGHTS_ITEMS.map((item, i) => (
            <div key={i} className="q-mega-insight-item" onClick={() => { setRoute('insights'); close(); }}>
              <div className="q-mega-insight-tag">{item.tag}</div>
              <div className="q-mega-insight-title">{item.title}</div>
              {item.desc && <div className="q-mega-insight-desc">{item.desc}</div>}
              <div className="q-mega-insight-date">{item.date}</div>
            </div>
          ))}
          <a className="q-mega-all-link" style={{ marginTop: 14 }} onClick={() => { setRoute('insights'); close(); }}>All insights ›</a>
        </div>
        <div>
          <div className="q-mega-col-label">From the team</div>
          <div className="q-mega-pullquote">
            <div className="q-mega-pullquote-text">"The organizations that get the most from AI aren't the ones that move fastest — they're the ones that move most deliberately."</div>
            <div className="q-mega-pullquote-attr">— Jonas Clark, Partner</div>
          </div>
        </div>
      </div>
    </div>
  );
}

// ─── Panel: Team ──────────────────────────────────────────────────────────────

const TEAM_PREVIEW = [
  { initials: 'AR', name: 'Amanda Rinderle', role: 'Managing Partner',                            photo: 'assets/team/amanda.jpg', bioId: 'amanda'  },
  { initials: 'JC', name: 'Jonas Clark',     role: 'Partner', photo: 'assets/team/jonas.png',  bioId: 'jonas'   },
  { initials: 'SS', name: 'Sharon Shepard',  role: 'Partner',                                    photo: 'assets/team/sharon.png', bioId: 'sharon'  },
  { initials: 'JH', name: 'Jeff Hunter',     role: 'Technical Director',                         photo: 'assets/team/jeff.png',   bioId: 'jeff'    },
];

function TeamPanelMega({ setRoute, close }) {
  const goBio = (bioId) => {
    setRoute('bio', bioId);
    close();
  };
  return (
    <div className="q-mega-panel-inner">
      <div className="q-mega-two-col">
        <div>
          <div className="q-mega-col-label">Who we are</div>
          {TEAM_PREVIEW.map((m, i) => (
            <div key={i} className="q-mega-team-member" onClick={() => goBio(m.bioId)}>
              <div
                className="q-mega-team-avatar"
                style={m.photo ? { backgroundImage: `url(${m.photo})`, backgroundSize: 'cover', backgroundPosition: 'center top' } : {}}
              >
                {!m.photo && m.initials}
              </div>
              <div>
                <div className="q-mega-team-name">{m.name}</div>
                <div className="q-mega-team-role">{m.role}</div>
              </div>
            </div>
          ))}
        </div>
        <div>
          <div className="q-mega-col-label">The firm</div>
          <div className="q-mega-pullquote">
            <div style={{ fontSize: 13, color: 'rgba(250,247,241,0.84)', lineHeight: 1.6 }}>Seven people who've spent a long time thinking about strategy and technology. We're based in Providence and we work nationally — across foundations, nonprofits, universities, and businesses.</div>
          </div>
        </div>
      </div>
      <div className="q-mega-footer-strip">
        <span className="q-mega-footer-text">Every client works directly with the partners — no account managers, no handoffs.</span>
        <a className="q-mega-footer-cta" onClick={() => { setRoute('team'); close(); }}>Meet the full team ›</a>
      </div>
    </div>
  );
}

// ─── Panel: Contact ───────────────────────────────────────────────────────────

function ContactPanel({ close }) {
  return (
    <div className="q-mega-panel-inner">
      <div className="q-mega-two-col">
        <div>
          <div className="q-mega-contact-headline">A first conversation is twenty minutes, specific, and free.</div>
          <div className="q-mega-contact-sub">If an Initial Evaluation is the right next step, we scope it in writing before you commit to anything.</div>
          <a href="mailto:info@quarterdeck.io" className="q-mega-contact-cta" onClick={close}>
            Email info@quarterdeck.io ›
          </a>
        </div>
        <div className="q-mega-contact-details">
          <div className="q-mega-contact-detail">
            <div className="q-mega-detail-label">Based in</div>
            <div className="q-mega-detail-value">Providence, Rhode Island</div>
            <div className="q-mega-detail-sub">Working with clients nationally</div>
          </div>
          <div className="q-mega-contact-detail">
            <div className="q-mega-detail-label">Follow</div>
            <a href="https://www.linkedin.com/company/quarterdeck-io/" target="_blank" rel="noopener noreferrer" className="q-mega-detail-value q-mega-detail-link">LinkedIn</a>
            <div className="q-mega-detail-sub">Insights and firm updates</div>
          </div>
        </div>
      </div>
    </div>
  );
}

// ─── SiteNav ──────────────────────────────────────────────────────────────────

function SiteNav({ route, setRoute, theme }) {
  const [scrolled,      setScrolled]      = React.useState(false);
  const [activePanel,   setActivePanel]   = React.useState(null);
  const [activeMarket,  setActiveMarket]  = React.useState('foundations');
  const [menuOpen,      setMenuOpen]      = React.useState(false);
  const [mobileWwdOpen, setMobileWwdOpen] = React.useState(false);
  const [mobileMarket,  setMobileMarket]  = React.useState(null);
  const navRef = React.useRef(null);

  React.useEffect(() => {
    const onScroll = () => setScrolled(window.scrollY > 16);
    onScroll();
    window.addEventListener('scroll', onScroll, { passive: true });
    return () => window.removeEventListener('scroll', onScroll);
  }, []);

  React.useEffect(() => {
    document.body.style.overflow = (menuOpen || activePanel) ? 'hidden' : '';
    return () => { document.body.style.overflow = ''; };
  }, [menuOpen, activePanel]);

  React.useEffect(() => {
    setActivePanel(null);
    setMenuOpen(false);
    setMobileWwdOpen(false);
    setMobileMarket(null);
  }, [route]);

  React.useEffect(() => {
    if (!activePanel) return;
    const handler = (e) => {
      if (navRef.current && !navRef.current.contains(e.target)) setActivePanel(null);
    };
    document.addEventListener('mousedown', handler);
    return () => document.removeEventListener('mousedown', handler);
  }, [activePanel]);

  React.useEffect(() => {
    const handler = (e) => {
      if (e.key === 'Escape') { setActivePanel(null); setMenuOpen(false); }
    };
    document.addEventListener('keydown', handler);
    return () => document.removeEventListener('keydown', handler);
  }, []);

  const close = () => setActivePanel(null);

  const togglePanel = (id) => {
    setActivePanel(prev => {
      if (prev === id) return null;
      if (id === 'what-we-do') setActiveMarket('foundations');
      return id;
    });
  };

  const isOpen = !!activePanel;
  const dark = theme === 'dark';
  const forceNavy = isOpen || menuOpen;

  const navClass = [
    'q-nav',
    (dark || forceNavy) ? 'on-dark' : 'on-light',
    (!forceNavy && scrolled) && 'scrolled',
    isOpen && 'panel-open',
    menuOpen && 'menu-open',
  ].filter(Boolean).join(' ');

  const logoFill = (dark || forceNavy) ? '#FAF7F1' : '#0B1F33';

  const navItems = [
    { id: 'what-we-do', label: 'What We Do' },
    { id: 'work',       label: 'Work' },
    { id: 'insights',   label: 'Insights' },
    { id: 'team',       label: 'Team' },
  ];

  return (
    <>
      <header ref={navRef} className={navClass}>

        {/* ── Nav bar ── */}
        <div className="q-wrap">
          <div className="q-nav-inner">
            <a className="q-nav-logo" onClick={() => { setRoute('home'); setActivePanel(null); setMenuOpen(false); }}>
              <QdeckMark size={26} navyFill={logoFill} flagFill="#30A3D9" />
              <span className="wordmark">Quarterdeck</span>
            </a>

            <ul className="q-nav-links q-nav-desktop">
              {navItems.map((item) => (
                <React.Fragment key={item.id}>
                  <li>
                    <a
                      className={activePanel === item.id ? 'active' : ''}
                      onClick={() => togglePanel(item.id)}
                    >
                      {item.label}
                      <span className="q-nav-drop-caret" aria-hidden="true">▾</span>
                    </a>
                  </li>
                  <li className="q-nav-sep">//</li>
                </React.Fragment>
              ))}
              <li>
                <a
                  className={`q-nav-cta${activePanel === 'contact' ? ' q-nav-cta--open' : ''}`}
                  onClick={() => togglePanel('contact')}
                >
                  Contact
                </a>
              </li>
            </ul>

            <button
              className="q-nav-hamburger"
              aria-label={menuOpen ? 'Close menu' : 'Open menu'}
              aria-expanded={menuOpen}
              onClick={() => setMenuOpen(o => !o)}
            >
              <HamburgerIcon open={menuOpen} />
            </button>
          </div>
        </div>

        {/* ── Mega panels ── */}
        {isOpen && (
          <div className="q-mega-panel">
            <div className="q-wrap">
              {activePanel === 'what-we-do' && (
                <WhatWeDoPanel setRoute={setRoute} close={close} activeMarket={activeMarket} setActiveMarket={setActiveMarket} />
              )}
              {activePanel === 'work'     && <WorkPanel     setRoute={setRoute} close={close} />}
              {activePanel === 'insights' && <InsightsPanel setRoute={setRoute} close={close} />}
              {activePanel === 'team'     && <TeamPanelMega setRoute={setRoute} close={close} />}
              {activePanel === 'contact'  && <ContactPanel  close={close} />}
            </div>
          </div>
        )}
      </header>

      {/* Backdrop */}
      {isOpen && <div className="q-mega-backdrop" onClick={close} />}

      {/* ── Mobile drawer ── */}
      <div className={`q-nav-overlay${menuOpen ? ' is-open' : ''}`} aria-hidden={!menuOpen}>
        <nav className="q-nav-overlay-body">
          <ul className="q-nav-overlay-links">

            {/* What We Do — two-level accordion */}
            <li style={{ '--i': 0 }}>
              <a onClick={() => { setMobileWwdOpen(v => !v); setMobileMarket(null); }}>
                <span className="idx">01</span>
                <span className="label">What We Do</span>
                <span className="q-mob-toggle">{mobileWwdOpen ? '−' : '+'}</span>
              </a>
              {mobileWwdOpen && (
                <div className="q-mob-sub">
                  {MARKETS.map(m => (
                    <div key={m.id} className="q-mob-market-group">
                      <a className="q-mob-market" onClick={() => setMobileMarket(v => v === m.id ? null : m.id)}>
                        <span>{m.name}</span>
                        <span className="q-mob-toggle" style={{ fontSize: 14 }}>{mobileMarket === m.id ? '−' : '+'}</span>
                      </a>
                      {mobileMarket === m.id && (
                        <div className="q-mob-services">
                          <a className="q-mob-svc q-mob-svc--overview" onClick={() => { setRoute(m.route); setMenuOpen(false); }}>
                            Overview →
                          </a>
                          {m.services.map((svc, i) => (
                            <a key={i} className={`q-mob-svc${route === svc.route ? ' active' : ''}`} onClick={() => { setRoute(svc.route); setMenuOpen(false); }}>
                              {svc.label}
                            </a>
                          ))}
                        </div>
                      )}
                    </div>
                  ))}
                </div>
              )}
            </li>

            <li style={{ '--i': 1 }}>
              <a className={route === 'work' ? 'active' : ''} onClick={() => { setRoute('work'); setMenuOpen(false); }}>
                <span className="idx">02</span><span className="label">Work</span>
              </a>
            </li>
            <li style={{ '--i': 2 }}>
              <a className={route === 'insights' || route === 'article' ? 'active' : ''} onClick={() => { setRoute('insights'); setMenuOpen(false); }}>
                <span className="idx">03</span><span className="label">Insights</span>
              </a>
            </li>
            <li style={{ '--i': 3 }}>
              <a className={route === 'team' || route === 'bio' ? 'active' : ''} onClick={() => { setRoute('team'); setMenuOpen(false); }}>
                <span className="idx">04</span><span className="label">Team</span>
              </a>
            </li>
            <li style={{ '--i': 4 }}>
              <a href="mailto:info@quarterdeck.io">
                <span className="idx">05</span><span className="label">Contact</span>
              </a>
            </li>
          </ul>

          <div className="q-nav-overlay-foot">
            <a href="mailto:info@quarterdeck.io" className="q-nav-overlay-email">info@quarterdeck.io</a>
            <span className="q-nav-overlay-loc">Providence, Rhode Island</span>
          </div>
        </nav>
      </div>
    </>
  );
}

// ─── SiteFooter ───────────────────────────────────────────────────────────────

function SiteFooter({ setRoute }) {
  return (
    <footer className="q-foot">
      <div className="q-wrap">
        <div className="q-foot-top">
          <div>
            <div className="q-nav-logo" style={{ color: 'var(--fg-inverse)', marginBottom: 24 }}>
              <QdeckMark size={28} navyFill="#FAF7F1" flagFill="#30A3D9" />
              <span className="wordmark">Quarterdeck</span>
            </div>
            <div className="q-foot-statement">
              AI, strategy, and the technology that makes it real.
            </div>
          </div>
          <div>
            <h5>Services</h5>
            <a onClick={() => setRoute('ai-adoption')}>AI Adoption</a>
            <a onClick={() => setRoute('strategy')}>Strategy</a>
            <a onClick={() => setRoute('technology')}>Technology</a>
          </div>
          <div>
            <h5>Who we work with</h5>
            <a onClick={() => setRoute('foundations')}>Foundations</a>
            <a onClick={() => setRoute('higher-ed')}>Higher Education</a>
            <a onClick={() => setRoute('business')}>Business</a>
            <a onClick={() => setRoute('nonprofits')}>Non-Profits</a>
          </div>
          <div>
            <h5>Contact</h5>
            <a href="mailto:info@quarterdeck.io">info@quarterdeck.io</a>
            <a href="https://www.linkedin.com/company/quarterdeck-io/" target="_blank" rel="noopener noreferrer">LinkedIn</a>
            <a onClick={() => setRoute('insights')}>Insights</a>
          </div>
        </div>
        <div className="q-foot-bottom">
          <div>© 2026 Quarterdeck LLC</div>
          <div>Providence, Rhode Island</div>
        </div>
      </div>
    </footer>
  );
}

Object.assign(window, { QdeckMark, Arrow, Chevron, SiteNav, SiteFooter });
