import type { PwaOptions } from "@vite-pwa/vitepress";
import { meta } from "./constants";
import { resolve } from "pathe";
import fg from "fast-glob";

export const pwa = {
  outDir: ".vitepress/dist",
  registerType: "autoUpdate",
  includeManifestIcons: false,
  includeAssets: fg.sync("**/*.{png,webp,svg,gif,ico,txt}", {
    cwd: resolve(__dirname, "../public"),
  }),

  manifest: {
    id: "/",
    name: meta.name,
    short_name: meta.name,
    description: meta.description,
    theme_color: "#ffffff",
    start_url: "/",
    lang: "en-US",
    dir: "ltr",
    orientation: "natural",
    display: "standalone",
    display_override: ["window-controls-overlay"],
    categories: meta.keywords,
    // TODO: replace with actual icons
    icons: [
      {
        src: "test.png",
        sizes: "64x64",
        type: "image/png",
      },
      {
        src: "test.png",
        sizes: "192x192",
        type: "image/png",
      },
      {
        src: "test.png",
        sizes: "512x512",
        type: "image/png",
        purpose: "any",
      },
      {
        src: "maskable-icon.png",
        sizes: "512x512",
        type: "image/png",
        purpose: "maskable",
      },
    ],
    handle_links: "preferred",
    launch_handler: {
      client_mode: ["navigate-existing", "auto"],
    },
    edge_side_panel: {
      preferred_width: 480,
    },
  },
  experimental: {
    includeAllowlist: true,
  },
  workbox: {
    globPatterns: ["**/*.{css,js,html,svg,png,ico,txt,woff2,json}"],
    globIgnores: ["**/404.html"],
    navigateFallback: null,
    runtimeCaching: [
      {
        urlPattern: /^https:\/\/fonts\.googleapis\.com\/.*/i,
        handler: "CacheFirst",
        options: {
          cacheName: "google-fonts-cache",
          expiration: {
            maxEntries: 10,
            maxAgeSeconds: 60 * 60 * 24 * 365, // <== 365 days
          },
          cacheableResponse: {
            statuses: [0, 200],
          },
        },
      },
      {
        urlPattern: /^https:\/\/fonts\.gstatic\.com\/.*/i,
        handler: "CacheFirst",
        options: {
          cacheName: "gstatic-fonts-cache",
          expiration: {
            maxEntries: 10,
            maxAgeSeconds: 60 * 60 * 24 * 365, // <== 365 days
          },
          cacheableResponse: {
            statuses: [0, 200],
          },
        },
      },
    ],
  },
  devOptions: {
    enabled: true,
    suppressWarnings: false,
  },
} satisfies PwaOptions;