export type InstallBannerVariant = 'prompt' | 'ios';

export type InstallBannerState = {
  variant: InstallBannerVariant;
};

export type InstallBannerInput = {
  isInstalled: boolean;
  isStandalone: boolean;
  canInstall: boolean;
  isIos: boolean;
};

export const INSTALL_BANNER_DISMISS_KEY = 'admin-install-banner-dismissed-v1';

export function resolveInstallBannerState(input: InstallBannerInput): InstallBannerState | null {
  if (input.isInstalled || input.isStandalone) {
    return null;
  }

  if (input.canInstall) {
    return { variant: 'prompt' };
  }

  if (input.isIos) {
    return { variant: 'ios' };
  }

  return null;
}

export function shouldShowInstallBanner(input: InstallBannerInput, dismissed: boolean): InstallBannerState | null {
  if (dismissed) {
    return null;
  }

  return resolveInstallBannerState(input);
}

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

  try {
    return window.localStorage.getItem(INSTALL_BANNER_DISMISS_KEY) === '1';
  } catch {
    return false;
  }
}

export function setInstallBannerDismissed(value: boolean): void {
  if (typeof window === 'undefined') {
    return;
  }

  try {
    if (value) {
      window.localStorage.setItem(INSTALL_BANNER_DISMISS_KEY, '1');
    } else {
      window.localStorage.removeItem(INSTALL_BANNER_DISMISS_KEY);
    }
  } catch {
    // Ignore storage errors.
  }
}
