/**
 * KubikonPlayerRedirect — заменяет старый <KubikonPlayer /> рендер
 * в Майнкрафтии. Получает play-ticket и редиректит на player.rublox.pro.
 *
 * Работает для ВСЕХ типов проектов:
 *   - обычные игры Рублокса
 *   - GD-уровни (296-358) — engine плеера сам распознаёт их по
 *     project_data и запускает GdLevelManager.
 *
 * Старый KubikonPlayer.jsx НЕ удаляется (по плану — точка возврата
 * на случай если плеер сломается у юзеров; импорт переключён).
 *
 * Fallback:
 *   - не залогинен → редирект на /login
 *   - play-ticket FAIL (бэк недоступен) → редирект на player.rublox.pro/<id>
 *     БЕЗ ticket. Плеер сам перенаправит на rublox.pro/app если у него тоже
 *     нет JWT. Это «слабый fallback», но лучше чем чёрный экран.
 *
 * Props: id (game/project id, число или строка)
 */

import React, { useEffect } from 'react';
import { useParams, useNavigate } from 'react-router-dom';
import { requestPlayTicket, buildPlayerUrl, PLAYER_BASE } from '../api/playTicket';

export default function KubikonPlayerRedirect() {
    const { id } = useParams();
    const navigate = useNavigate();

    useEffect(() => {
        let cancelled = false;
        (async () => {
            // Если не залогинен — на логин Майнкрафтии. Веб-плеер требует JWT.
            let hasToken = false;
            try { hasToken = !!localStorage.getItem('Authorization'); } catch (e) {}
            if (!hasToken) {
                navigate('/login', { replace: true });
                return;
            }

            try {
                const ticket = await requestPlayTicket();
                if (cancelled) return;
                const url = buildPlayerUrl(id, ticket);
                window.location.assign(url);
            } catch (e) {
                if (cancelled) return;
                // eslint-disable-next-line no-console
                console.warn('[KubikonPlayerRedirect] play-ticket failed:', e?.message || e);
                // Слабый fallback: открываем плеер без ticket — он сам
                // перенаправит на rublox.pro/app если JWT в localStorage
                // плеера тоже нет. Чёрный экран не показываем.
                window.location.assign(`${PLAYER_BASE}/${id}`);
            }
        })();
        return () => { cancelled = true; };
    }, [id, navigate]);

    // Брендовый сплеш на время редиректа (обычно <300мс).
    // Без библиотек, чтобы не тянуть лишнего в Майнкрафтию ради 1 экрана.
    return (
        <div style={SPLASH_WRAP}>
            <div style={SPLASH_LOGO}>▶</div>
            <div style={SPLASH_TITLE}>Рублокс</div>
            <div style={SPLASH_SUB}>Открываем игру #{id}…</div>
        </div>
    );
}

const SPLASH_WRAP = {
    position: 'fixed',
    inset: 0,
    display: 'flex',
    flexDirection: 'column',
    alignItems: 'center',
    justifyContent: 'center',
    background: 'linear-gradient(160deg, #2841C8 0%, #4B6EF0 100%)',
    color: '#fff',
    fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
    zIndex: 10000,
};
const SPLASH_LOGO = {
    width: 110,
    height: 110,
    borderRadius: 24,
    background: '#fff',
    color: '#3357FF',
    display: 'flex',
    alignItems: 'center',
    justifyContent: 'center',
    fontSize: 64,
    fontWeight: 700,
    boxShadow: '0 8px 24px rgba(0,0,0,0.3)',
    marginBottom: 24,
};
const SPLASH_TITLE = {
    fontSize: 42,
    fontWeight: 700,
    letterSpacing: 1,
    textShadow: '0 2px 8px rgba(0,0,0,0.25)',
};
const SPLASH_SUB = {
    marginTop: 14,
    fontSize: 14,
    opacity: 0.85,
};
