import { writable } from 'svelte/store';
import {
  isDismissed,
  requestPersistence,
  setDismissed,
  type InstallContext
} from './protection-model';

export const storageUnprotected = writable(false);
export const recoveryDismissed = writable(false);

export const isDeviceBuild = import.meta.env.VITE_MALICE_TARGET === 'device';

export function installContext(): InstallContext {
  const standalone =
    window.matchMedia('(display-mode: standalone)').matches ||
    (navigator as Navigator & { standalone?: boolean }).standalone === true;
  return { device: isDeviceBuild, standalone };
}

export function loadDismissals(account: string): void {
  recoveryDismissed.set(isDismissed(localStorage, 'recovery', account));
}

export async function protectStorage(account: string): Promise<void> {
  const result = await requestPersistence(navigator.storage).catch(() => null);
  storageUnprotected.set(isDeviceBuild && result !== null && !result.persisted && !isDismissed(localStorage, 'storage', account));
}

export function dismissStorageWarning(account: string): void {
  setDismissed(localStorage, 'storage', account);
  storageUnprotected.set(false);
}

export function dismissRecoveryPrompt(account: string): void {
  setDismissed(localStorage, 'recovery', account);
  recoveryDismissed.set(true);
}
