export type LearnPlyrInstance={
  currentTime:number;duration:number;destroy():void;on(event:string,callback:(event?:unknown)=>void):void;off?(event:string,callback:(event?:unknown)=>void):void;
};
type PlyrConstructor=new(target:HTMLElement,options?:Record<string,unknown>)=>LearnPlyrInstance;
declare global{interface Window{Plyr?:PlyrConstructor}}
const SCRIPT='https://cdn.jsdelivr.net/npm/plyr@3.7.8/dist/plyr.min.js';
const STYLE='https://cdn.jsdelivr.net/npm/plyr@3.7.8/dist/plyr.css';
let pending:Promise<PlyrConstructor>|undefined;
export function ensureLearnPlyr():Promise<PlyrConstructor>{
  if(typeof window==='undefined')return Promise.reject(new Error('plyr_browser_required'));
  if(window.Plyr)return Promise.resolve(window.Plyr);
  if(!pending)pending=new Promise((resolve,reject)=>{
    if(!document.querySelector('link[data-interactive-learn-plyr]')){const link=document.createElement('link');link.rel='stylesheet';link.href=STYLE;link.dataset.interactiveLearnPlyr='1';document.head.append(link)}
    const existing=document.querySelector<HTMLScriptElement>('script[data-interactive-learn-plyr]');
    const ready=()=>window.Plyr?resolve(window.Plyr):reject(new Error('plyr_load_failed'));
    if(existing){existing.addEventListener('load',ready,{once:true});existing.addEventListener('error',()=>reject(new Error('plyr_load_failed')),{once:true});return;}
    const script=document.createElement('script');script.src=SCRIPT;script.async=true;script.dataset.interactiveLearnPlyr='1';script.addEventListener('load',ready,{once:true});script.addEventListener('error',()=>reject(new Error('plyr_load_failed')),{once:true});document.head.append(script);
  });
  return pending;
}
