"use client"; import React, { createContext, useCallback, useContext, useMemo } from "react"; import { openGameLaunchWithParams } from "@/components/providers/game-launch-store"; type GameLaunchContextValue = { launchGame: (placeId: string, jobId?: string) => void; }; const GameLaunchContext = createContext(null); export function useGameLaunch() { const ctx = useContext(GameLaunchContext); if (!ctx) { throw new Error("useGameLaunch must be used within GameLaunchProvider"); } return ctx; } export function GameLaunchProvider({ children }: { children: React.ReactNode; }) { const launchGame = useCallback((placeId: string, jobId?: string) => { openGameLaunchWithParams(placeId, jobId); console.log("[GameLaunchProvider] Launching", { placeId, jobId }); const gameLaunchParams = { launchmode: "play", LaunchExp: "InApp", placeId: placeId, gameInstanceId: jobId ?? undefined }; console.log( "[GameLaunchProvider] Constructed GameLaunchParams", gameLaunchParams ); const url = new URL("roblox://experiences/start"); for (const [key, value] of Object.entries(gameLaunchParams)) { if (value !== undefined && value !== null) { url.searchParams.append(key, String(value)); } } const deeplinkNew = url.toString(); console.log("[GameLaunchProvider] Opening URL:", deeplinkNew); document.location.href = deeplinkNew; }, []); const value = useMemo(() => ({ launchGame }), [launchGame]); return ( {children} ); }