import { createContext } from "react"; export type PlayerItem = | { kind: "embed"; embedUrl: string; title?: string; type: string } | { kind: "file"; fileUrl: string; mimeType: string; title?: string }; export interface PlayerContextValue { // Playback state — readable by any consumer current: PlayerItem | null; playing: boolean; currentTime: number; duration: number; // Control — callable by any consumer play(item: PlayerItem): void; stop(): void; seekTo(time: number): void; togglePlay(): void; // Internal: GlobalPlayer registers MediaPlayer's imperative handles here // so seekTo / togglePlay can reach into the actual media element. seekRef: { current: ((t: number) => void) | null }; toggleRef: { current: (() => void) | null }; // Internal: GlobalPlayer calls these to push state back into the provider onPlayStateChange(playing: boolean): void; onTimeUpdate(time: number, duration: number): void; } export const PlayerContext = createContext({ current: null, playing: false, currentTime: 0, duration: 0, play: () => {}, stop: () => {}, seekTo: () => {}, togglePlay: () => {}, seekRef: { current: null }, toggleRef: { current: null }, onPlayStateChange: () => {}, onTimeUpdate: () => {}, });