export type InstallOutcome = 'accepted' | 'dismissed' | 'unknown';

export type BeforeInstallPromptEvent = Event & {
  prompt: () => Promise<void>;
  userChoice: Promise<{ outcome: InstallOutcome; platform: string }>;
};

export function isIosDevice(userAgent: string): boolean {
  return /iphone|ipad|ipod/i.test(userAgent);
}

export function resolveStandaloneDisplayMode(matchMediaStandalone: boolean, navigatorStandalone?: boolean): boolean {
  return matchMediaStandalone || navigatorStandalone === true;
}

export function getStandaloneStatus(): boolean {
  if (typeof window === 'undefined') {
    return false;
  }

  const matchMediaStandalone = window.matchMedia?.('(display-mode: standalone)')?.matches ?? false;
  const navigatorStandalone = typeof navigator !== 'undefined' ? (navigator as Navigator & { standalone?: boolean }).standalone : undefined;

  return resolveStandaloneDisplayMode(matchMediaStandalone, navigatorStandalone);
}
