/* global React, Icon */

const SERVICES_HOVER = [
  {
    num: "01", title: "Tagarbejde",
    sub: "Nyt tag & tagrenovering · Monier Tagpartner™",
    before: "./assets/before-after/roof-after.png",
    after:  "./assets/before-after/roof-before.png",
  },
  {
    num: "02", title: "Nye vinduer",
    sub: "Salg & montering · VELFAC VinduesMester",
    before: "./assets/before-after/window-after.png",
    after:  "./assets/before-after/window-before.png",
  },
  {
    num: "03", title: "Tilbygning & ombygning",
    sub: "Fra første streg til afleveret nøgle",
    before: "./assets/before-after/woodfloor-after.png",
    after:  "./assets/before-after/woodfloor-before.png",
  },
  {
    num: "04", title: "Tømrer & snedker",
    sub: "Døre, gulve, terrasser og entrepriser",
    before: "./assets/before-after/woodfloor-after.png",
    after:  "./assets/before-after/woodfloor-before.png",
  },
  {
    num: "05", title: "Akut tagskade",
    sub: "Vi rykker ud samme dag",
    before: "./assets/before-after/roof-after.png",
    after:  "./assets/before-after/roof-before.png",
  },
  {
    num: "06", title: "VELUX dagslys",
    sub: "Ovenlys, kviste & lyskasser",
    before: "./assets/before-after/window-after.png",
    after:  "./assets/before-after/window-before.png",
  },
];

function BeforeAfterSlider({ before, after, beforeAlt, afterAlt }) {
  const [pos, setPos] = React.useState(50);
  const [dragging, setDragging] = React.useState(false);
  const ref = React.useRef(null);

  const move = React.useCallback((clientX) => {
    if (!dragging || !ref.current) return;
    const rect = ref.current.getBoundingClientRect();
    const next = Math.max(0, Math.min(100, ((clientX - rect.left) / rect.width) * 100));
    setPos(next);
  }, [dragging]);

  React.useEffect(() => {
    const up = () => setDragging(false);
    window.addEventListener("mouseup", up);
    return () => window.removeEventListener("mouseup", up);
  }, []);

  return (
    <div
      ref={ref}
      className="ba"
      onMouseMove={e => move(e.clientX)}
      onMouseLeave={() => setDragging(false)}
      onTouchMove={e => move(e.touches[0].clientX)}
      onTouchEnd={() => setDragging(false)}
    >
      {/* Before (base layer) */}
      <img src={before} alt={beforeAlt} className="ba__img ba__img--before" draggable="false" onDragStart={e => e.preventDefault()} />

      {/* After (clipped top layer) */}
      <div className="ba__after-wrap" style={{ clipPath: `inset(0 ${100 - pos}% 0 0)` }}>
        <img src={after} alt={afterAlt} className="ba__img" draggable="false" onDragStart={e => e.preventDefault()} />
      </div>

      {/* Labels */}
      <span className="ba__label ba__label--before">Før</span>
      <span className="ba__label ba__label--after">Efter</span>

      {/* Handle */}
      <div
        className={"ba__handle" + (dragging ? " ba__handle--drag" : "")}
        style={{ left: `${pos}%` }}
        onMouseDown={() => setDragging(true)}
        onTouchStart={() => setDragging(true)}
      >
        <div className="ba__line" />
        <div className="ba__knob">
          <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round">
            <polyline points="15 18 9 12 15 6" />
          </svg>
          <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round">
            <polyline points="9 18 15 12 9 6" />
          </svg>
        </div>
      </div>
    </div>
  );
}

function ServicesHover({ onOpenQuote }) {
  const [active, setActive] = React.useState(0);

  return (
    <section className="svh" data-screen-label="Services Hover">
      <div className="container">
        <div className="svh__head">
          <span className="svh__eyebrow">Hvad vi laver</span>
          <h2 className="svh__title">Vores ydelser</h2>
        </div>
        <div className="svh__grid">

          <div className="svh__list">
            {SERVICES_HOVER.map((s, i) => (
              <div
                key={s.num}
                className={"svh__item" + (active === i ? " svh__item--on" : "")}
                onMouseEnter={() => setActive(i)}
                onClick={() => setActive(i)}
              >
                <span className="svh__num">{s.num}</span>
                <div className="svh__item-text">
                  <span className="svh__item-title">{s.title}</span>
                  <span className="svh__item-sub">{s.sub}</span>
                </div>
                <a href="#" className="svh__readmore">
                  Læs mere
                  <Icon name="arrow-right" size={13} stroke="currentColor" />
                </a>
              </div>
            ))}
          </div>

          <div className="svh__panel">
            {SERVICES_HOVER.map((s, i) => (
              <div
                key={s.num}
                className={"svh__slide" + (active === i ? " svh__slide--on" : "")}
              >
                <BeforeAfterSlider
                  before={s.before}
                  after={s.after}
                  beforeAlt={s.title + " før"}
                  afterAlt={s.title + " efter"}
                />
              </div>
            ))}
          </div>

        </div>
      </div>
      <style>{`
        .svh { background: #0B1118; padding: 80px 0 100px; }
        .svh__head { margin-bottom: 56px; }
        .svh__eyebrow { display: inline-flex; align-items: center; gap: 10px; font-family: var(--font-display); font-weight: 600; font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent); margin-bottom: 12px; }
        .svh__eyebrow::before { content: ''; width: 24px; height: 2px; background: var(--accent); display: inline-block; }
        .svh__title { font-family: var(--font-display); font-weight: 700; font-size: clamp(32px, 4vw, 52px); line-height: 1; text-transform: uppercase; letter-spacing: -0.01em; color: #F4F1EC; margin: 0; }

        .svh__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 64px; align-items: stretch; }

        /* Service list */
        .svh__list { display: flex; flex-direction: column; }
        .svh__item { display: flex; align-items: center; gap: 20px; padding: 18px 0; border-top: 1px solid rgba(255,255,255,0.08); cursor: pointer; transition: color 150ms var(--ease-snappy); color: rgba(244,241,236,0.35); }
        .svh__item:last-of-type { border-bottom: 1px solid rgba(255,255,255,0.08); }
        .svh__item--on, .svh__item:hover { color: var(--accent); }
        .svh__num { font-family: var(--font-display); font-weight: 700; font-size: 12px; letter-spacing: 0.1em; flex-shrink: 0; width: 28px; transition: inherit; }
        .svh__item-text { flex: 1; display: flex; flex-direction: column; gap: 2px; }
        .svh__item-title { font-family: var(--font-display); font-weight: 700; font-size: clamp(18px, 2vw, 26px); line-height: 1; text-transform: uppercase; letter-spacing: -0.01em; transition: inherit; }
        .svh__item-sub { font-family: var(--font-body); font-size: 13px; color: rgba(244,241,236,0.38); transition: color 150ms var(--ease-snappy); }
        .svh__item--on .svh__item-sub, .svh__item:hover .svh__item-sub { color: rgba(229,172,49,0.65); }
        .svh__readmore { flex-shrink: 0; display: inline-flex; align-items: center; gap: 6px; font-family: var(--font-display); font-weight: 600; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--accent); border: 1px solid rgba(229,172,49,0.4); border-radius: 999px; padding: 6px 14px; opacity: 0; transform: translateX(-8px); transition: opacity 180ms var(--ease-snappy), transform 180ms var(--ease-snappy), background 150ms; white-space: nowrap; }
        .svh__readmore:hover { background: rgba(229,172,49,0.12); }
        .svh__item--on .svh__readmore { opacity: 1; transform: translateX(0); }

        /* Slide panel — stacked, clip-path reveal between slides */
        .svh__panel { position: relative; border-radius: var(--radius-xl); overflow: hidden; height: 100%; min-height: 320px; background: #1B2532; }
        .svh__slide { position: absolute; inset: 0; clip-path: polygon(0% 100%, 100% 100%, 100% 100%, 0% 100%); transition: clip-path 0.65s cubic-bezier(0.33, 1, 0.68, 1); }
        .svh__slide--on { clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%); }

        /* Before/After slider */
        .ba { position: relative; width: 100%; height: 100%; overflow: hidden; cursor: ew-resize; user-select: none; -webkit-user-select: none; }
        .ba__img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; pointer-events: none; -webkit-user-drag: none; user-drag: none; }
        .ba__img--before { position: absolute; }
        .ba__after-wrap { position: absolute; inset: 0; overflow: hidden; pointer-events: none; }
        .ba__after-wrap img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; pointer-events: none; -webkit-user-drag: none; user-drag: none; }

        /* Labels */
        .ba__label { position: absolute; top: 14px; font-family: var(--font-display); font-weight: 700; font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; padding: 4px 10px; border-radius: 4px; pointer-events: none; z-index: 4; }
        .ba__label--before { left: 14px; background: rgba(11,17,24,0.72); color: rgba(244,241,236,0.7); }
        .ba__label--after  { right: 14px; background: rgba(229,172,49,0.9); color: #0B1118; }

        /* Handle */
        .ba__handle { position: absolute; top: 0; bottom: 0; width: 0; z-index: 5; transform: translateX(-50%); cursor: ew-resize; }
        .ba__line { position: absolute; top: 0; bottom: 0; left: 50%; width: 2px; background: #fff; transform: translateX(-50%); }
        .ba__knob { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 44px; height: 44px; border-radius: 999px; background: #fff; display: flex; align-items: center; justify-content: center; gap: 0; box-shadow: 0 2px 12px rgba(0,0,0,0.45); transition: transform 150ms var(--ease-snappy), box-shadow 150ms; color: #0B1118; cursor: ew-resize; }
        .ba__handle--drag .ba__knob { transform: translate(-50%, -50%) scale(1.12); box-shadow: 0 4px 20px rgba(0,0,0,0.55); }

        @media (max-width: 960px) {
          .svh__grid { grid-template-columns: 1fr; gap: 40px; }
          .svh__panel { aspect-ratio: 16/9; min-height: 0; }
        }
      `}</style>
    </section>
  );
}

Object.assign(window, { ServicesHover });
