import * as path from "path";
import { promises as fs } from "fs";

export async function loadAppConfig() {
  const packageJson = await loadPackageJson();
  const appName = process.env.TIME_SAFARI_APP_TITLE || packageJson.name;

  return {
    pwaConfig: {
      registerType: "autoUpdate",
      strategies: "injectManifest",
      srcDir: ".",
      filename: "sw_scripts-combined.js",
      manifest: {
        name: appName,
        short_name: appName,
        icons: [
          {
            src: "./img/icons/android-chrome-192x192.png",
            sizes: "192x192",
            type: "image/png",
          },
          {
            src: "./img/icons/android-chrome-512x512.png",
            sizes: "512x512",
            type: "image/png",
          },
          {
            src: "./img/icons/android-chrome-maskable-192x192.png",
            sizes: "192x192",
            type: "image/png",
            purpose: "maskable",
          },
          {
            src: "./img/icons/android-chrome-maskable-512x512.png",
            sizes: "512x512",
            type: "image/png",
            purpose: "maskable",
          },
        ],
        share_target: {
          action: "/share-target",
          method: "POST",
          enctype: "multipart/form-data",
          params: {
            files: [
              {
                name: "photo",
                accept: ["image/*"],
              },
            ],
          },
        },
      },
    },
    aliasConfig: {
      "@": path.resolve(__dirname, ".."),
      buffer: path.resolve(__dirname, "node_modules", "buffer"),
      "dexie-export-import/dist/import":
        "dexie-export-import/dist/import/index.js",
    },
  };
}

async function loadPackageJson() {
  const packageJsonPath = path.resolve(__dirname, "package.json");
  const packageJsonData = await fs.readFile(packageJsonPath, "utf-8");
  return JSON.parse(packageJsonData);
}