'use client'

import Link from 'next/link'
import { usePathname } from 'next/navigation'
import { useEffect, useState } from 'react'
import { ArrowRight, Fish, Menu, MessageCircle, Pause, Play, X } from 'lucide-react'
import type { SiteSettings } from '@/lib/site-content'

const heroGridRows = [
  ['2.png', '3.png', '4.png', '5.png', '5.png', '7.png', '8.png', '9.png', '10.png', '11.png'],
  ['12.png', '14.png', '16.png', '17.png', '20.png', '26.png', '27.png', '28.png', '29.png', '30.png'],
  ['31.png', '32.png', '33.png', '34.png', '40.png', '41.png', '43.png', '44.png', '45.png', '46.png'],
  ['47.png', '49.png', '50.png', '51.png', '52.png', '54.png', '57.png', '58.png', '59.webp', '56.png'],
]

function MovingImageGrid({ paused }: { paused: boolean }) {
  return <div className={`hero-grid-canvas ${paused ? 'hero-grid-paused' : ''}`} aria-hidden="true">{heroGridRows.map((row, rowIndex) => <div key={rowIndex} className="hero-grid-track">{[0, 1].map((copy) => <div key={copy} className="hero-grid-set">{row.map((image, imageIndex) => <div key={`${copy}-${imageIndex}-${image}`} className={`hero-grid-tile ${imageIndex % 5 === 1 || imageIndex % 5 === 4 ? 'hero-grid-tile-wide' : ''}`}><img src={`/gallery/${image}`} alt="" className="size-full object-cover" /></div>)}</div>)}</div>)}</div>
}

export function Header({ settings }: { settings?: SiteSettings }) {
  const [open, setOpen] = useState(false)
  const loginHref = '/login'
  const newsBadge = settings?.newsBadgeCount ?? 0
  const newsBadgeLabel = newsBadge > 99 ? '99+' : String(newsBadge)
  return <header className="fixed inset-x-0 top-0 z-50 border-b border-white/10 bg-[var(--navy)]/90 backdrop-blur-md">
    <div className="mx-auto flex max-w-7xl items-center justify-between px-5 py-4 lg:px-8">
      <Link href="/" className="flex items-center gap-3 text-white" aria-label="RG Fish Farming home"><span className="grid size-10 place-items-center rounded-full bg-[var(--aqua)] text-[var(--navy)]"><Fish size={19} /></span><span className="font-display text-xl font-semibold">RG Fish Farming<span className="text-[var(--aqua)]">.</span></span></Link>
      <nav className="hidden items-center gap-6 text-sm font-medium text-white/85 lg:flex xl:gap-8" aria-label="Primary navigation"><Link href="/" className="text-[var(--aqua)]">Home</Link><Link href="/our-stories">Our stories</Link><Link href="/gallery">Gallery</Link><Link href="/projects">Projects</Link><Link href="/news" className="inline-flex items-center gap-2">News{newsBadge > 0 && <span className="grid min-w-5 place-items-center rounded-full bg-[var(--aqua)] px-1.5 py-0.5 text-[.65rem] font-extrabold leading-none text-[var(--navy)]" aria-label={`${newsBadge} new news ${newsBadge === 1 ? 'item' : 'items'}`}>{newsBadgeLabel}</span>}</Link><Link href="/contact">Contact</Link></nav>
      <a href={loginHref} className="hidden rounded-full border border-white/45 px-5 py-2.5 text-sm font-semibold text-white lg:block">Get started</a>
      <button type="button" onClick={() => setOpen(!open)} className="grid size-10 place-items-center rounded-full bg-white/15 text-white lg:hidden" aria-label={open ? 'Close menu' : 'Open menu'}>{open ? <X /> : <Menu />}</button>
    </div>
    {open && <nav className="mx-4 mb-4 flex flex-col gap-4 rounded-2xl bg-white p-5 text-sm font-semibold shadow-xl lg:hidden"><Link href="/">Home</Link><Link href="/our-stories">Our stories</Link><Link href="/gallery">Gallery</Link><Link href="/projects">Projects</Link><Link href="/news" className="flex items-center gap-2">News{newsBadge > 0 && <span className="grid min-w-5 place-items-center rounded-full bg-[var(--teal)] px-1.5 py-0.5 text-[.65rem] font-extrabold leading-none text-white" aria-label={`${newsBadge} new news ${newsBadge === 1 ? 'item' : 'items'}`}>{newsBadgeLabel}</span>}</Link><Link href="/contact">Contact</Link><a href={loginHref} className="text-[var(--teal)]">Get started</a></nav>}
  </header>
}

export function Footer() {
  return <footer className="bg-cover bg-center text-white" style={{ backgroundImage: 'linear-gradient(rgba(2, 91, 121, .48), rgba(2, 91, 121, .64)), url("/footer-aquaculture-bg.png")', textShadow: '0 1px 3px rgba(0, 0, 0, .7)' }}>
    <div className="mx-auto grid max-w-7xl gap-10 px-5 py-14 lg:grid-cols-[1.5fr_1fr_1fr] lg:px-8">
      <div><Link href="/" className="font-display text-2xl font-semibold">RG Fish Farming<span className="text-[var(--aqua)]">.</span></Link><p className="mt-4 max-w-xs text-sm leading-6 text-white/90">Breeding · Fingerlings · Grow-out · Harvest</p></div>
      <div><p className="text-xs font-bold uppercase tracking-[0.2em] text-[var(--aqua)]">Explore</p><div className="mt-5 flex flex-col gap-3 text-sm text-white"><Link href="/our-stories">Our stories</Link><Link href="/gallery">Gallery</Link><Link href="/projects">Projects</Link><Link href="/news">News</Link><Link href="/contact">Contact</Link></div></div>
      <div><p className="text-xs font-bold uppercase tracking-[0.2em] text-[var(--aqua)]">For stakeholders</p><div className="mt-5 flex flex-col gap-3 text-sm text-white"><Link href="/login">Get started</Link><a href="mailto:hello@rgfishfarming.com">hello@rgfishfarming.com</a><a href="tel:+2348000000000">+234 800 000 0000</a></div></div>
    </div>
    <div className="border-t border-white/35"><div className="mx-auto flex max-w-7xl flex-col gap-2 px-5 py-5 text-xs text-white/90 sm:flex-row sm:justify-between lg:px-8"><span>© 2026 RG Fish Farming</span><span>Better fish farming in Tanzania.</span></div></div>
  </footer>
}

export function ScrollAnimations() {
  useEffect(() => {
    const root = document.documentElement
    const elements = document.querySelectorAll<HTMLElement>('[data-reveal]')
    root.classList.add('scroll-animations-ready')

    const observer = new IntersectionObserver((entries) => {
      entries.forEach((entry) => {
        if (entry.isIntersecting) {
          entry.target.classList.add('is-visible')
          observer.unobserve(entry.target)
        }
      })
    }, { threshold: 0.12, rootMargin: '0px 0px -60px' })

    elements.forEach((element) => observer.observe(element))
    return () => {
      observer.disconnect()
      root.classList.remove('scroll-animations-ready')
    }
  }, [])

  return null
}

export function Hero() { const [paused, setPaused] = useState(false); return <section className="relative min-h-[720px] overflow-hidden bg-[var(--navy)] text-white"><div className="absolute inset-0 overflow-hidden"><MovingImageGrid paused={paused} /><div className="absolute inset-0 bg-gradient-to-r from-[var(--navy)]/95 via-[var(--navy)]/75 to-[var(--navy)]/50" /></div><div className="relative mx-auto grid min-h-[720px] max-w-7xl items-center gap-10 px-5 pb-16 pt-32 lg:grid-cols-[1.05fr_.95fr] lg:px-8"><div className="hero-copy"><h1 className="max-w-3xl font-display text-6xl leading-[.92] tracking-[-.05em] sm:text-8xl lg:text-[7rem]">RG Fish<br /><em className="font-normal text-[var(--aqua)]">Farming.</em></h1><p className="mt-7 max-w-2xl font-display text-3xl leading-tight text-white sm:text-4xl">Where better fish farming begins in Tanzania.</p><p className="mt-5 max-w-xl text-lg leading-8 text-white/85">Tilapia · African catfish · Hatchery · Grow-out · Harvest</p><div className="mt-9 flex flex-wrap gap-3"><Link href="/our-stories" className="inline-flex items-center gap-3 rounded-full bg-[var(--aqua)] px-6 py-3.5 text-sm font-bold text-[var(--navy)] transition-transform hover:-translate-y-1">Discover our story <ArrowRight size={17} /></Link><Link href="/projects" className="rounded-full border border-white/55 px-6 py-3.5 text-sm font-bold text-white transition-transform hover:-translate-y-1">See our impact</Link></div></div><div className="hero-cycle-enter"><img src="/gallery/25.png" alt="RG Fish Farming" className="hero-cycle-float h-auto w-full object-contain" /></div></div><button type="button" onClick={() => setPaused((current) => !current)} className="absolute bottom-7 right-5 grid size-11 place-items-center rounded-full border border-white/35 bg-[var(--navy)]/65 text-white backdrop-blur-sm transition hover:bg-[var(--navy)] lg:right-8" aria-label={paused ? 'Play moving background' : 'Pause moving background'}>{paused ? <Play size={17} fill="currentColor" /> : <Pause size={17} fill="currentColor" />}</button></section> }

export function PageIntro({ eyebrow, tone = 'teal' }: { eyebrow: string; title: string; text: string; tone?: 'teal' | 'red' }) {
  const accent = tone === 'red' ? 'text-[var(--news-red)]' : 'text-[var(--teal)]'
  return <section className="border-b border-[var(--line)] bg-[var(--paper)] px-5 pb-5 pt-28 lg:px-8"><nav className="mx-auto flex max-w-7xl items-center gap-2 text-sm text-[var(--ink-soft)]" aria-label="Breadcrumb"><Link href="/" className={`font-semibold ${accent}`}>Home</Link><span aria-hidden="true">/</span><h1 className={`text-sm font-semibold ${tone === 'red' ? 'text-[var(--news-red)]' : 'text-[var(--navy)]'}`}>{eyebrow}</h1></nav></section>
}

function PageTracker({ trackUrl }: { trackUrl?: string }) {
  const pathname = usePathname()
  useEffect(() => {
    if (!trackUrl) return
    let session = window.localStorage.getItem('rg-session')
    if (!session) {
      session = window.crypto.randomUUID()
      window.localStorage.setItem('rg-session', session)
    }
    const url = new URL(trackUrl)
    url.searchParams.set('event', 'page_view')
    url.searchParams.set('path', pathname)
    url.searchParams.set('session', session)
    fetch(url, { mode: 'no-cors', keepalive: true }).catch(() => undefined)
  }, [pathname, trackUrl])
  return null
}

function WhatsAppButton({ settings }: { settings?: SiteSettings }) {
  const pathname = usePathname()
  if (!settings?.whatsapp.enabled || !settings.whatsapp.number) return null
  const number = settings.whatsapp.number.replace(/\D/g, '')
  const message = [settings.whatsapp.message, pathname].filter(Boolean).join(' ')
  const trackClick = () => {
    if (!settings.links.track) return
    const url = new URL(settings.links.track)
    url.searchParams.set('event', 'whatsapp_support_clicked')
    url.searchParams.set('path', pathname)
    fetch(url, { mode: 'no-cors', keepalive: true }).catch(() => undefined)
  }
  return <a href={`https://wa.me/${number}?text=${encodeURIComponent(message)}`} onClick={trackClick} target="_blank" rel="noreferrer" className="fixed bottom-5 right-5 z-50 inline-flex items-center gap-2 rounded-full bg-[#25D366] px-5 py-3.5 text-sm font-bold text-white shadow-xl transition hover:-translate-y-1" aria-label={settings.whatsapp.label}><MessageCircle size={19} />{settings.whatsapp.label}</a>
}

export function Shell({ children, settings }: { children: React.ReactNode; settings?: SiteSettings }) { return <main className="overflow-hidden bg-[var(--paper)] text-[var(--navy)]"><Header settings={settings} />{children}<Footer /><WhatsAppButton settings={settings} /><PageTracker trackUrl={settings?.links.track} /></main> }
