/* global React */
const TR = {
  bg: 'rgb(6,11,24)',
  bgDeep: 'rgb(21,19,49)',
  gold: '#E6C79C',
  goldDark: '#9E7B4B',
  lavender: 'rgb(186,171,212)',
  muted: 'rgb(78,70,114)',
  white: 'rgb(255,255,255)'
};

// 22 Wielkie Arkana — z polskim tytułem, glifem i krótkim opisem znaczenia.
const TAROT_CARDS = [
  { id: 0,  name: 'Głupiec',        glyph: '☼',  meaning: 'Nowy początek, otwartość na to, co nieznane. Karta zaprasza Cię do zrobienia kroku, nawet jeśli nie widzisz jeszcze całej drogi. Zaufaj impulsowi — to dobry moment na coś świeżego.' },
  { id: 1,  name: 'Mag',            glyph: '∞',  meaning: 'Masz w sobie wszystko, czego potrzebujesz. Karta przypomina o Twojej sprawczości, talentach i odwadze działania. To czas, by zamienić intencję w konkret.' },
  { id: 2,  name: 'Najwyższa Kapłanka', glyph: '☽', meaning: 'Wsłuchaj się w siebie głębiej. Intuicja podpowiada coś, czego umysł jeszcze nie potrafi nazwać. Karta zaprasza do ciszy, refleksji i zaufania temu, co wewnętrzne.' },
  { id: 3,  name: 'Cesarzowa',      glyph: '♀',  meaning: 'Obfitość, troska, twórcza energia. Karta pokazuje, że coś dojrzewa — relacja, projekt, pomysł. Pozwól, by rozwijało się w swoim tempie.' },
  { id: 4,  name: 'Cesarz',         glyph: '♂',  meaning: 'Struktura, dyscyplina, gotowość do wzięcia odpowiedzialności. Karta wspiera świadome decyzje i budowanie trwałych podstaw — także wobec samego siebie.' },
  { id: 5,  name: 'Arcykapłan',     glyph: '☩',  meaning: 'Tradycja, mądrość przekazywana z pokolenia na pokolenie, nauka. Karta zaprasza do skorzystania z wiedzy kogoś, kto już tę drogę przeszedł.' },
  { id: 6,  name: 'Kochankowie',    glyph: '❦',  meaning: 'Wybór, który ma w sobie głos serca. Karta dotyczy nie tylko relacji — pokazuje moment, w którym trzeba wybrać to, co prawdziwie Twoje.' },
  { id: 7,  name: 'Rydwan',         glyph: '➤',  meaning: 'Siła woli, kierunek, determinacja. Karta mówi, że masz energię, by ruszyć z miejsca. Jasno postawiony cel pomaga panować nad chaosem dookoła.' },
  { id: 8,  name: 'Siła',           glyph: '∽',  meaning: 'Łagodność jest większą mocą niż przymus. Karta zaprasza do oswajania tego, co w Tobie dzikie — z cierpliwością i odwagą.' },
  { id: 9,  name: 'Pustelnik',      glyph: '🜂',  meaning: 'Czas zatrzymania i wewnętrznej pracy. Karta wskazuje, że odpowiedź pojawi się, gdy pozwolisz sobie na ciszę i samotność — choć na chwilę.' },
  { id: 10, name: 'Koło Fortuny',   glyph: '⊙',  meaning: 'Cykle się zamykają i otwierają. Karta przypomina, że zmiana jest naturalna — to nie koniec, tylko kolejny obrót koła.' },
  { id: 11, name: 'Sprawiedliwość', glyph: '⚖',  meaning: 'Równowaga, prawda, konsekwencje wyborów. Karta zaprasza do uczciwego spojrzenia na sytuację i podjęcia decyzji w zgodzie z wewnętrznym kompasem.' },
  { id: 12, name: 'Wisielec',       glyph: '⨯',  meaning: 'Zatrzymanie, zmiana perspektywy, oddanie kontroli. Karta uczy, że czasem nie trzeba działać — wystarczy spojrzeć inaczej.' },
  { id: 13, name: 'Śmierć',         glyph: '✶',  meaning: 'Koniec etapu, transformacja, miejsce na nowe. Karta nie mówi o stracie, lecz o uwolnieniu od tego, co już Cię nie wspiera.' },
  { id: 14, name: 'Umiarkowanie',   glyph: '⚗',  meaning: 'Harmonia, łączenie przeciwieństw, spokojny rytm. Karta pokazuje, że największą zmianę przynoszą małe, świadome kroki.' },
  { id: 15, name: 'Diabeł',         glyph: '⛧',  meaning: 'Przywiązanie, schemat, którego trudno się pozbyć. Karta nie potępia — pokazuje, gdzie warto zobaczyć własne łańcuchy, by je rozluźnić.' },
  { id: 16, name: 'Wieża',          glyph: '⌂',  meaning: 'Nagła zmiana, która oczyszcza. Karta mówi o tym, że coś musi runąć, by mogło powstać coś prawdziwszego. Zaufaj — to dla Twojego dobra.' },
  { id: 17, name: 'Gwiazda',        glyph: '✦',  meaning: 'Nadzieja, ulga, lekkość po trudniejszym czasie. Karta przypomina, że światło wraca — nawet jeśli teraz jeszcze nie jest pełne.' },
  { id: 18, name: 'Księżyc',        glyph: '☾',  meaning: 'Niejasność, intuicja, sny i emocje. Karta zaprasza, by zamiast szukać racjonalnej odpowiedzi — zaufać temu, co czujesz pod powierzchnią.' },
  { id: 19, name: 'Słońce',         glyph: '☀',  meaning: 'Radość, witalność, spełnienie. Karta mówi, że jesteś we właściwym miejscu — pozwól sobie cieszyć się tym, co już masz.' },
  { id: 20, name: 'Sąd',            glyph: '𓂀',  meaning: 'Przebudzenie, powrót do siebie, ważna decyzja. Karta pokazuje moment, w którym zaczynasz słyszeć swój głos jaśniej niż wcześniej.' },
  { id: 21, name: 'Świat',          glyph: '◯',  meaning: 'Domknięcie cyklu, integracja, spełnienie. Karta mówi, że proces, w którym byłaś/-eś, prowadzi do harmonijnego końca — i nowego początku.' }
];

function shuffleDeck() {
  const arr = TAROT_CARDS.slice();
  for (let i = arr.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [arr[i], arr[j]] = [arr[j], arr[i]];
  }
  return arr;
}

function TarotReader() {
  const [deck, setDeck] = React.useState(() => shuffleDeck());
  const [picked, setPicked] = React.useState(null); // { card, index }
  const [flipped, setFlipped] = React.useState(false);
  const flipTimer = React.useRef(null);

  React.useEffect(() => () => {
    if (flipTimer.current) clearTimeout(flipTimer.current);
  }, []);

  const onPick = (card, idx) => {
    if (picked) return;
    setPicked({ card, index: idx });
    if (flipTimer.current) clearTimeout(flipTimer.current);
    flipTimer.current = setTimeout(() => setFlipped(true), 320);
  };

  const onShuffle = () => {
    setFlipped(false);
    if (flipTimer.current) clearTimeout(flipTimer.current);
    setTimeout(() => {
      setPicked(null);
      setDeck(shuffleDeck());
    }, 220);
  };

  // Card visuals — narrow heavily-overlapping cards in a single fanned row
  const CARD_W = 78;
  const CARD_H = 124;
  const OVERLAP = 56; // ~22px of each card visible under the next

  return (
    <section style={{
      position: 'relative', background: TR.bg,
      borderTop: `1px solid ${TR.muted}`, borderBottom: `1px solid ${TR.muted}`,
      padding: '80px 24px', overflow: 'hidden'
    }}>
      <style>{`
        @keyframes tr-pulse-glow {
          0%, 100% { box-shadow: 0 0 0 0 rgba(230,199,156,0); }
          50%      { box-shadow: 0 0 18px 1px rgba(230,199,156,0.4); }
        }
        @keyframes tr-fade-up {
          from { opacity: 0; transform: translateY(8px); }
          to   { opacity: 1; transform: none; }
        }
        .tr-deck {
          position: relative;
          height: ${CARD_H + 28}px;
          margin-top: 8px;
        }
        .tr-card {
          position: absolute;
          top: 12px;
          width: ${CARD_W}px; height: ${CARD_H}px;
          border-radius: 8px;
          border: 1px solid ${TR.muted};
          background: linear-gradient(135deg, #15123a 0%, #0a0a1f 100%);
          cursor: pointer;
          transition: transform .35s cubic-bezier(0.22, 1, 0.36, 1),
                      border-color .35s, box-shadow .35s, opacity .35s, top .35s;
          overflow: hidden;
        }
        .tr-card-back {
          position: absolute; inset: 4px;
          border-radius: 5px;
          border: 1px solid rgba(230,199,156,0.35);
          background:
            radial-gradient(circle at 50% 30%, rgba(230,199,156,0.18) 0%, transparent 60%),
            radial-gradient(circle at 50% 70%, rgba(186,171,212,0.10) 0%, transparent 65%),
            linear-gradient(180deg, #15123a 0%, #0a0a1f 100%);
          display: flex; align-items: center; justify-content: center;
          color: ${TR.gold};
          font-family: 'Playfair Display', serif;
          font-size: 22px;
          opacity: 0.9;
        }
        .tr-card:not(.picked):hover {
          top: 0;
          z-index: 100 !important;
          border-color: ${TR.gold};
          animation: tr-pulse-glow 2s ease-in-out infinite;
        }
        .tr-card.picked {
          opacity: 0;
          transform: translateY(-22px) scale(0.92);
          pointer-events: none;
        }
      `}</style>

      <div style={{ maxWidth: 1312, margin: '0 auto', padding: '0 40px' }}>
        <div style={{
          display: 'grid', gridTemplateColumns: '0.85fr 1.15fr', gap: 56, alignItems: 'flex-start'
        }}>
          {/* Left column — heading + fanned deck */}
          <div style={{ display: 'flex', flexDirection: 'column', gap: 20 }}>
            <div style={{
              fontFamily: 'Nunito', fontWeight: 700, fontSize: 14,
              letterSpacing: '0.2em', color: TR.muted
            }}>SZYBKA WRÓŻBA</div>
            <h2 style={{
              margin: 0, fontFamily: 'Playfair Display', fontWeight: 400, fontSize: 40,
              lineHeight: 1.2, letterSpacing: '-0.022em', color: TR.white
            }}>Wybierz kartę,<br />by zobaczyć przesłanie</h2>
            <p style={{
              margin: 0, fontFamily: 'Nunito', fontSize: 16, lineHeight: 1.6,
              color: TR.lavender
            }}>Skup się na chwilę. Pomyśl o pytaniu lub obszarze życia, który Cię teraz zajmuje. Gdy poczujesz, że to ten moment — kliknij jedną z kart. To krótki wgląd, lekka inspiracja do refleksji.</p>

            <div className="tr-deck" style={{
              width: (deck.length - 1) * (CARD_W - OVERLAP) + CARD_W
            }}>
              {deck.map((c, i) =>
                <div
                  key={`${c.id}-${i}`}
                  className={`tr-card ${picked && picked.index === i ? 'picked' : ''}`}
                  role="button"
                  aria-label="Wylosuj kartę"
                  style={{
                    left: i * (CARD_W - OVERLAP),
                    zIndex: i + 1
                  }}
                  onClick={() => onPick(c, i)}>
                  <div className="tr-card-back">✦</div>
                </div>
              )}
            </div>

            {picked &&
              <div style={{ marginTop: 12 }}>
                <BtnSecond small onClick={onShuffle}>Wylosuj ponownie</BtnSecond>
              </div>
            }
          </div>

          {/* Right column — result panel */}
          <div style={{
            minHeight: 380,
            padding: '40px 36px',
            borderRadius: 16,
            border: `1px solid ${TR.muted}`,
            background: 'rgba(21,19,49,0.45)',
            display: 'flex', flexDirection: 'column', justifyContent: 'center'
          }}>
            {picked && flipped ?
              <div style={{ animation: 'tr-fade-up .55s ease both' }}>
                <div style={{
                  fontFamily: 'Nunito', fontSize: 13, letterSpacing: '0.2em',
                  textTransform: 'uppercase', color: TR.muted, marginBottom: 20
                }}>Twoja karta</div>
                <div style={{
                  display: 'flex', alignItems: 'center', gap: 24, marginBottom: 24
                }}>
                  <div style={{
                    width: 96, height: 156, borderRadius: 10,
                    border: `1px solid ${TR.gold}`,
                    background: 'linear-gradient(160deg, #1a1644 0%, #0a0a1f 100%)',
                    display: 'flex', alignItems: 'center', justifyContent: 'center',
                    color: TR.gold, fontFamily: 'Playfair Display', fontSize: 48,
                    flexShrink: 0,
                    boxShadow: '0 0 24px 0 rgba(230,199,156,0.25)'
                  }}>{picked.card.glyph}</div>
                  <div>
                    <div style={{
                      fontFamily: 'Nunito', fontSize: 13, letterSpacing: '0.2em',
                      textTransform: 'uppercase', color: TR.gold, marginBottom: 8
                    }}>{`Arkan ${picked.card.id}`}</div>
                    <h3 style={{
                      margin: 0, fontFamily: 'Playfair Display', fontWeight: 400,
                      fontSize: 32, color: TR.white, letterSpacing: '-0.022em'
                    }}>{picked.card.name}</h3>
                  </div>
                </div>
                <p style={{
                  margin: 0, fontFamily: 'Nunito', fontSize: 16, lineHeight: 1.75,
                  color: TR.lavender
                }}>{picked.card.meaning}</p>
                <div style={{
                  marginTop: 28, paddingTop: 24,
                  borderTop: `1px solid ${TR.muted}`,
                  display: 'flex', flexDirection: 'column', gap: 16, alignItems: 'flex-start'
                }}>
                  <p style={{
                    margin: 0, fontFamily: 'Nunito', fontSize: 15, lineHeight: 1.65,
                    color: TR.lavender
                  }}>To krótka inspiracja. Jeśli chcesz <span style={{ color: TR.white }}>głębszego wglądu</span> w swoje pytanie — emocje, kontekst, kierunek — zamów sesję <span style={{ color: TR.white }}>Stawianie Tarota</span>. Pracujemy z pełnym układem kart i Twoją historią.</p>
                  <BtnMain href="stawianietarota.html">Zamów sesję Stawianie Tarota</BtnMain>
                </div>
              </div> :
              <div style={{
                display: 'flex', flexDirection: 'column', gap: 16, alignItems: 'flex-start'
              }}>
                <div style={{
                  fontFamily: 'Playfair Display', fontSize: 96, fontWeight: 400,
                  lineHeight: 1, color: TR.muted, opacity: 0.4
                }}>✦</div>
                <p style={{
                  margin: 0, fontFamily: 'Nunito', fontSize: 15, lineHeight: 1.65,
                  color: TR.muted, maxWidth: 420
                }}>Wybierz jedną z kart obok. Twoja karta odsłoni się tutaj — wraz z krótkim opisem przesłania.</p>
              </div>
            }
          </div>
        </div>
      </div>
    </section>);
}

Object.assign(window, { TarotReader });
