import React, { useState, useEffect, useRef } from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';

const WA_URL = "https://wa.me/351220000000?text=Gostaria%20de%20marcar%20a%20minha%20Consulta%20de%20Avaliação";
const TEL = "+351 220 000 000";

/* --- icons --- */
const LogoMark = () => (
  <svg viewBox="0 0 36 36" fill="none" aria-hidden="true">
    <rect width="36" height="36" rx="9" fill="var(--sage)"/>
    <path d="M11 26c0-5 3-8 7-8s7 3 7 8" stroke="var(--bg)" strokeWidth="1.8" strokeLinecap="round"/>
    <circle cx="14" cy="13" r="3" fill="var(--accent)"/><circle cx="22" cy="13" r="3" fill="var(--accent)"/>
    <path d="M8 28h20" stroke="var(--accent)" strokeWidth="1.2" strokeLinecap="round"/>
  </svg>
);
const Sun = () => (<svg className="sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"/></svg>);
const Moon = () => (<svg className="moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z"/></svg>);
const Shield = () => (<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>);
const Close = () => (<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round"><path d="M18 6L6 18M6 6l12 12"/></svg>);
const ArrowLeft = () => (<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M15 18l-6-6 6-6"/></svg>);
const ArrowRight = () => (<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M9 18l6-6-6-6"/></svg>);

const MenuIcon = () => (<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round"><path d="M4 7h16M4 12h16M4 17h16"/></svg>);
const WhatsAppSvg = () => (<svg viewBox="0 0 32 32" fill="currentColor" aria-hidden="true"><path d="M16 3C9.4 3 4 8.4 4 15c0 2.1.6 4.1 1.6 5.9L4 29l8.3-1.6c1.7.9 3.7 1.4 5.7 1.4 6.6 0 12-5.4 12-12S22.6 3 16 3zm0 21.8c-1.7 0-3.4-.5-4.9-1.3l-.4-.2-4.9 1 1-4.8-.2-.4C5.7 17.6 5.2 16.3 5.2 15 5.2 9.5 9.7 5.2 16 5.2S26.8 9.5 26.8 15c0 5.5-4.5 9.8-10.8 9.8zm5.7-7.3c-.3-.2-1.8-.9-2.1-1s-.5-.2-.7.2c-.2.3-.8 1-1 1.2s-.4.2-.7.1c-.3-.2-1.4-.5-2.6-1.6-1-.9-1.6-1.9-1.8-2.3-.2-.3-.1-.5.1-.7.1-.1.3-.4.5-.6.1-.2.2-.4.3-.6.1-.2.1-.5 0-.7s-.7-1.7-1-2.3c-.3-.6-.5-.5-.7-.5h-.6c-.2 0-.6.1-.8.4-.3.3-1 1-1 2.5s1 2.9 1.2 3.1c.2.2 2.1 3.2 5 4.5 1 .4 1.7.7 2.3.9.9.3 1.8.2 2.5.1.8-.1 2.3-.9 2.7-1.9.3-.9.3-1.7.2-1.9zm0 0"/></svg>);

/* --- hooks --- */
function useReveal(ref) {
  useEffect(() => {
    const el = ref.current; if (!el) return;
    const o = new IntersectionObserver(es => es.forEach(e => { if (e.isIntersecting) { e.target.classList.add('is-visible'); o.unobserve(e.target); } }), { threshold: 0.12 });
    o.observe(el); return () => o.disconnect();
  }, [ref]);
}
function useTheme() {
  const [th, setTh] = useState(() => localStorage.getItem('od-theme') || 'light');
  useEffect(() => { document.documentElement.setAttribute('data-theme', th); localStorage.setItem('od-theme', th); }, [th]);
  return [th, () => setTh(p => p === 'light' ? 'dark' : 'light')];
}

/* --- data --- */
const NAV = [{ href: "#tratamentos", label: "Tratamentos" }, { href: "#sobre", label: "Sobre" }, { href: "#resultados", label: "Resultados" }, { href: "#avaliacoes", label: "Avaliações" }, { href: "#faq", label: "FAQ" }];

const TREATMENTS = [
  { cat: "Rosto & Rejuvenescimento", items: [
    { h: "Toxina Botulínica (Botox)", s: "Para quem pretende suavizar rugas de expressão", b: "Previne e atenua as linhas de expressão, preservando a naturalidade dos gestos faciais." },
    { h: "Preenchimento com Ácido Hialurónico", s: "Para quem procura repor volumes", b: "Reposição de volumes e hidratação profunda, com resultados elegantes e harmoniosos." },
    { h: "Bioestimuladores de Colagénio", s: "Para quem sente flacidez cutânea", b: "Estimulam a neocolagénese, devolvendo firmeza e luminosidade de forma gradual." },
    { h: "Harmonização Facial", s: "Para quem pretende equilibrar proporções", b: "Equilíbrio de proporções com foco na subtileza e nos resultados naturais." },
    { h: "Preenchimento de Olheiras", s: "Para quem apresenta olheiras profundas", b: "Atenua o aspeto de cansaço crónico, devolvendo frescura ao olhar." },
    { h: "Mesoterapia Facial", s: "Para quem procura luminosidade", b: "Hidratação celular profunda e luminosidade imediata da epiderme." }
  ] },
  { cat: "Estética Facial Avançada", items: [
    { h: "Higiene Facial Profunda", s: "Para quem precisa de purificação cutânea", b: "Purificação celular e renovação da pele, ideal como manutenção periódica." },
    { h: "Peeling Químico", s: "Para quem tem manchas ou tom irregular", b: "Correção de manchas e uniformização do tom de pele, com protocolo médico." },
    { h: "Microneedling", s: "Para quem quer refinar a textura", b: "Refinamento da textura e atenuação de cicatrizes, estimulando a regeneração." },
    { h: "Radiofrequência Facial", s: "Para quem procura efeito lifting sem cirurgia", b: "Remodelação do colagénio com efeito de reafirmação progressivo." }
  ] },
  { cat: "Corpo & Remodelação", items: [
    { h: "Bioestimuladores Corporal / Glúteos", s: "Para quem tem flacidez corporal", b: "Tratamento da flacidez corporal, sem recurso a cirurgia." },
    { h: "Mesoterapia Corporal", s: "Para quem tem gordura resistente", b: "Combate ao aspeto de \"casca de laranja\" e à gordura localizada." },
    { h: "Criolipólise", s: "Para quem tem gordura localizada", b: "Destruição do tecido adiposo de forma segura e controlada." },
    { h: "Radiofrequência Corporal", s: "Para quem tem flacidez pós-parto ou peso", b: "Reafirmação cutânea após oscilações de peso." }
  ] },
  { cat: "Saúde Íntima & Complementares", items: [
    { h: "Rejuvenescimento Íntimo", s: "Para quem procura cuidado ginecológico regenerativo", b: "Cuidado médico com total confidencialidade e discrição." },
    { h: "Drenagem Linfática Manual", s: "Para quem tem retenção de líquidos", b: "Fisioterapia dermatofuncional para retenção e recuperação pós-operatória." },
    { h: "Consulta de Nutrição Clínica", s: "Para quem quer basear os resultados corporais", b: "Base estrutural para sustentar os resultados dos tratamentos corporais." },
    { h: "Depilação a Laser Médico", s: "Para todos os fotótipos", b: "Método definitivo com laser Alexandrite / Díodo, adaptável a cada pele." }
  ] }
];

const FAQ = [
  { q: "A Consulta de Avaliação tem custos?", a: "A primeira Consulta de Avaliação realiza-se sem custo inicial e sem compromisso. Permite-nos conhecer a sua pele e apresentar-lhe um plano personalizado antes de qualquer decisão." },
  { q: "Os resultados são naturais?", a: "Sim. O foco é realçar a sua beleza com naturalidade — sem exageros, respeitando sempre os seus traços. Os resultados dependem de avaliação médica individual." },
  { q: "Os tratamentos causam dor?", a: "A maioria dos tratamentos é realizada com técnicas de anestesia tópica ou local, numa abordagem centrada no máximo conforto do paciente. As contraindicações são sempre avaliadas em consulta." },
  { q: "Têm facilidades de pagamento?", a: "Sim, disponibilizamos soluções de pagamento faseado ajustadas ao plano de tratamento proposto, para que cada etapa decorra sem pressão financeira." },
  { q: "Quantas sessões preciso?", a: "Depende do protocolo e do seu objetivo. Explicamos tudo em detalhe na Consulta de Avaliação, incluindo etapas, prazos e orçamento claros." },
  { q: "A clínica está devidamente licenciada?", a: "Sim. A clínica encontra-se inscrita na Entidade Reguladora da Saúde (ERS), cumprindo todos os requisitos legais de funcionamento." },
  { q: "O que é a toxina botulínica?", a: "A toxina botulínica, vulgarmente conhecida como Botox, é uma substância que aplicada em pequenas doses relaxa temporariamente músculos específicos, suavizando rugas de expressão. O efeito é temporário e o plano é sempre definido em Consulta de Avaliação." },
  { q: "O que é o ácido hialurónico?", a: "É uma molécula naturalmente presente no organismo, usada em preenchimentos para repor volume e hidratar os tecidos. É biocompatível e reabsorvível ao longo do tempo." }
];

const REVIEWS = [
  { n: "Maria L.", l: "Foz do Douro", r: 5, t: "Senti-me ouvida desde o primeiro momento. O resultado respeita completamente as minhas feições — ninguém percebe, mas eu noto.", a: "/assets/hero.jpg" },
  { n: "Joãõo P.", l: "Boavista", r: 5, t: "A avaliação médica foi seria e tranquila. O plano foi explicado com clareza, sem qualquer pressão para decidir.", a: "/assets/doctor-portrait.jpg" },
  { n: "Sofia R.", l: "Cedofeita", r: 5, t: "Ambiente discreto e acolhedor. Saí da consulta com informação real para decidir — é assim que uma clínica médica deve ser.", a: "/assets/clinic-interior.jpg" }
];

const CLINIC = [
  { n: "Dra. Inês Carvalho", role: "Diretora Clínica · Medicina Estética", exp: "Faculdade de Medicina da Universidade do Porto · 12 anos de experiência · Cédula OM 123456", a: "/assets/doctor-portrait.jpg" },
  { n: "Dr. Pedro Almeida", role: "Médico · Medicina Estética e Laser", exp: "Especialização em Laser Alexandrite e ND:YAG · 9 anos de experiência · Cédula OM 234567", a: "/assets/clinic-interior.jpg" },
  { n: "Dra. Rita Sousa", role: "Fisioterapeuta · Dermatofuncional", exp: "Mestrado em Fisioterapia Dermatofuncional · 8 anos de experiência · Cédula 345678", a: "/assets/results-1.jpg" }
];

/* --- components --- */
function Header() {
  const [scrolled, setScrolled] = useState(false);
  const [menuOpen, setMenuOpen] = useState(false);
  const [, toggleTheme] = useTheme();
  useEffect(() => { const onS = () => setScrolled(window.scrollY > 20); onS(); window.addEventListener('scroll', onS, { passive: true }); return () => window.removeEventListener('scroll', onS); }, []);
  return (<>
    <header className={'header' + (scrolled ? ' is-scrolled' : '')}>
      <div className="header__inner">
        <a href="#top" className="logo" aria-label="Derma & Forma — início"><span className="logo-mark"><LogoMark /></span> Derma & Forma</a>
        <nav className="nav" aria-label="Navegação principal">{NAV.map(n => <a key={n.href} href={n.href}>{n.label}</a>)}</nav>
        <div className="header__right">
          <button className="theme-toggle" data-testid="theme-toggle" aria-label="Alternar tema" onClick={toggleTheme}><Sun /><Moon /></button>
          <a href={WA_URL} className="btn btn--primary" target="_blank" rel="noopener">Agendar Consulta</a>
          <button className="burger" aria-label="Abrir menu" aria-expanded={menuOpen} onClick={() => setMenuOpen(true)}><MenuIcon /></button>
        </div>
      </div>
    </div>
    <div className={'offcanvas' + (menuOpen ? ' is-open' : '')} data-testid="offcanvas">
      <div className="offcanvas__bg" onClick={() => setMenuOpen(false)} />
      <div className="offcanvas__panel" role="dialog" aria-modal="true" aria-label="Menu de navegação">
        <button className="offcanvas__close" aria-label="Fechar menu" onClick={() => setMenuOpen(false)}><Close /></button>
        {NAV.concat({ href: WA_URL, label: 'Agendar Consulta' }).map(n => <a key={n.href} href={n.href} onClick={() => setMenuOpen(false)} target={n.href.startsWith('http') ? '_blank' : undefined} rel="noopener">{n.label}</a>)}
      </div>
    </div>
  </>);
}

function Section({ children, ...props }) { const r = useRef(null); useReveal(r); return <section {...props} ref={r}>{children}</section>; }

function App() {
  const [trTab, setTrTab] = useState(0);
  const [faqOpen, setFaqOpen] = useState(0);
  const [sliderPos, setSliderPos] = useState(50);
  const [loaded, setLoaded] = useState([false, false, false]);
  const [formSent, setFormSent] = useState(false);
  const [cookieState, setCookieState] = useState(() => localStorage.getItem('od-cookies') || '');
  const [modalOpen, setModalOpen] = useState(false);
  const [cookiePrefs, setCookiePrefs] = useState({ essential: true, analytics: false, marketing: false });

  const saveCookie = (p) => { localStorage.setItem('od-cookies', JSON.stringify(p)); setModalOpen(false); setCookieState('set'); };

  const sliderRef = useRef(null);
  const update = (cx) => { const el = sliderRef.current; if (!el) return; const r = el.getBoundingClientRect(); setSliderPos(Math.max(0, Math.min(100, ((cx - r.left) / r.width) * 100))); };
  const onMove = (e) => update(e.touches ? e.touches[0].clientX : e.clientX);
  const onDown = (e) => { e.preventDefault(); const m = (ev) => onMove(ev); const u = () => { document.removeEventListener('mousemove', m); document.removeEventListener('mouseup', u); document.removeEventListener('touchmove', m); document.removeEventListener('touchend', u); }; document.addEventListener('mousemove', m); document.addEventListener('mouseup', u); document.addEventListener('touchmove', m, { passive: false }); document.addEventListener('touchend', u); onMove(e); };
  const imLoad = (i) => setLoaded(p => { const n = [...p]; n[i] = true; return n; });
  const gallery = ['/assets/results-1.jpg', '/assets/results-2.jpg', '/assets/clinic-interior.jpg'];

  return <>
    <Header />
    <main>
      {/* Hero */}
      <section className="hero" id="top" data-od-id="hero"><div className="container"><div className="hero__grid">
        <div>
          <p className="eyebrow hero__eyebrow">Clínica no Porto · Boavista</p>
          <h1>Medicina Esté na Porto com Rigor Clínico: Realce a Sua Beleza Natural</h1>
          <p className="hero__sub">Diagnóstico médico rigoroso, equipa qualificada e resultados naturais, pensados para quem valoriza segurança tanto quanto estética.</p>
          <p className="hero__body">Na Derma & Forma – Aesthetic Clinic, os protocolos de estética facial e corporal são desenhados após uma avaliação médica individual. Sem padronizações, sem exageros — apenas a sua naturalidade, realçada com ciência.</p>
          <div className="hero__cta">
            <a href={WA_URL} className="btn btn--primary" target="_blank" rel="noopener" data-testid="hero-cta">Agendar a Minha Consulta</a>
            <a href="#tratamentos" className="btn btn--secondary">Ver Tratamentos</a>
          </div>
          <div className="hero__social">
            <div className="hero__avatars">{([1, 2, 3, 4].map(i => <img key={i} src="/assets/hero.jpg" alt="" loading="lazy" />))}</div>
            <div><div className="hero__stars">★★★★★</div>+2 mil pacientes acompanhados · nota 4, ± no Google</div>
          </div>
        </div>
        <div className="hero__medial" data-testid="hero-image">
          <img src="/assets/hero.jpg" alt="Ambiente da Derma & Forma — clínica de medicina estética no Porto" fetchPriority="high" />
          <div className="hero__badge"><strong>ERS · Ordem dos Médicos</strong>Clínica licenciada e registada</div>
        </div>
      </div></div></section>

      {/* TrustBar */}
      <div className="trustbar"><div className="container"><div className="trustbar__grid">
        {[['+2 mil','pacientes acompanhados'],['4,9','nota no Google'],['98%','de satisfação'],['Pagamento\nfaseado','disponível']].map((x,i) => <div className="trustbar__item" key={i}><div className="stat-num">{x[0].split('\n').map((l,j) => <>{j>0 && <br />}{l}</>)}</div><p>{x[1]}</p></div>)}
      </div></div></div>

      {/* Objections */}
      <Section className="section section--alt objection" id="compreensao" data-od-id="objections">
        <div className="container">
          <p className="eyebrow">Compreensão</p>
          <h2>Cuidar de si, sem exageros.</h2>
          <div className="grid" style={{ marginTop: 48 }}>
            {[{ h: "Medo de resultados artificiais", p: "O nosso foco é a naturalidade. Valorizamos os seus traços, sem exageros nem padronizações.", od: 'obj-card-natural' },
              { h: "Não sabe por onde começar", p: "Na Consulta de Avaliação, desenhamos consigo um plano à medida da sua pele e dos seus objetivos.", od: 'obj-card-start' },
              { h: "Já teve uma experiência dececionante", p: "Equipa médica qualificada, produtos certificados e um ambiente seguro e acolhedor, do início ao fim.", od: 'obj-card-past' }].map(x => (
                <article className="card" key={x.od} data-od-id={x.od}><h3>{x.h}</h3><p>{x.p}</p></article>))}
          </div>
        </div>
      </Section>

      {/* Treatments */}
      <Section refelctly></SectionRef>~~~

    </main>
    {/* WhatsApp Float */}
    <a href={WA_URL} className="whatsapp-float" data-testid="whatsapp-float-button" aria-label="Falar no WhatsApp" target="_blank" rel="noopener" title="Fale connosco no WhatsApp"><WhatsAppSvg /></a>
  </>;
}

ReactDOM.createRoot(document.getElementById('root')).render(React.createElement(App));