// rollup.config.js
import commonjs from "@rollup/plugin-commonjs";
import nodeResolve from "@rollup/plugin-node-resolve";
import json from "@rollup/plugin-json";
import replace from "@rollup/plugin-replace";
import builtins from "builtin-modules";
import { terser } from "rollup-plugin-terser";
import typescript from "@rollup/plugin-typescript";

// Base settings to use
const baseTypescriptCompilerSettings = {
  target: "ES6",
  jsx: "react",
  reactNamespace: "React",
  moduleResolution: "node",
  sourceMap: true,
  lib: ["es6", "dom"],
  noImplicitReturns: true,
  noFallthroughCasesInSwitch: true,
  strict: true,
  strictPropertyInitialization: false,
  noImplicitAny: true,
  noImplicitThis: true,
  allowJs: true,
  checkJs: true,
  incremental: false,
  esModuleInterop: true,
  importHelpers: true,
  module: "ESNext",
  include: ["src/**/*.+(ts|tsx)"],
  rootDir: "./src",
};

const walletCli = {
  input: "src/headless/taler-wallet-cli.ts",
  output: {
    file: "dist/standalone/taler-wallet-cli.js",
    format: "cjs",
  },
  external: builtins,
  plugins: [
    nodeResolve({
      preferBuiltins: true,
    }),

    commonjs({
      include: ["node_modules/**", "dist/node/**"],
      extensions: [".js", ".ts"],
      ignoreGlobal: false, // Default: false
      sourceMap: false,
      ignore: ["taler-wallet"],
    }),

    json(),
    
    typescript({
      tsconfig: false,
      ...baseTypescriptCompilerSettings,
      sourceMap: false,
    }),
  ],
};

const walletAndroid = {
  input: "src/android/index.ts",
  output: {
    //dir: "dist/standalone",
    file: "dist/standalone/taler-wallet-android.js",
    format: "cjs",
    exports: "named",
  },
  external: builtins,
  plugins: [
    json(),

    nodeResolve({
      preferBuiltins: true,
    }),

    commonjs({
      include: ["node_modules/**"],
      extensions: [".js"],
      sourceMap: false,
      ignore: ["taler-wallet"],
    }),

    typescript({
      tsconfig: false,
      ...baseTypescriptCompilerSettings,
      sourceMap: false,
    }),
  ],
};

const webExtensionPageEntryPoint = {
  input: "src/webex/pageEntryPoint.ts",
  output: {
    file: "dist/webextension/pageEntryPoint.js",
    format: "iife",
    exports: "none",
    name: "webExtensionPageEntry",
  },
  external: builtins,
  plugins: [
    json(),

    nodeResolve({
      preferBuiltins: true,
    }),

    terser(),

    replace({
      "process.env.NODE_ENV": JSON.stringify("production"),
    }),

    commonjs({
      include: ["node_modules/**", "dist/node/**"],
      extensions: [".js"],
      sourceMap: false,
      ignore: ["taler-wallet"],
    }),

    typescript({
      tsconfig: false,
      ...baseTypescriptCompilerSettings,
      sourceMap: false,
    }),
  ],
};

const webExtensionBackgroundPageScript = {
  input: "src/webex/background.ts",
  output: {
    file: "dist/webextension/background.js",
    format: "iife",
    exports: "none",
    name: "webExtensionBackgroundScript",
  },
  external: builtins,
  plugins: [
    json(),

    nodeResolve({
      preferBuiltins: true,
    }),

    terser(),

    replace({
      "process.env.NODE_ENV": JSON.stringify("production"),
    }),

    commonjs({
      include: ["node_modules/**", "dist/node/**"],
      extensions: [".js"],
      sourceMap: false,
      ignore: ["taler-wallet", "crypto"],
    }),

    typescript({
      tsconfig: false,
      ...baseTypescriptCompilerSettings,
      sourceMap: false,
    }),
  ],
};

const webExtensionCryptoWorker = {
  input: "src/crypto/workers/browserWorkerEntry.ts",
  output: {
    file: "dist/webextension/browserWorkerEntry.js",
    format: "iife",
    exports: "none",
    name: "webExtensionCryptoWorker",
  },
  external: builtins,
  plugins: [
    json(),

    nodeResolve({
      preferBuiltins: true,
    }),

    terser(),

    replace({
      "process.env.NODE_ENV": JSON.stringify("production"),
    }),

    commonjs({
      include: ["node_modules/**", "dist/node/**"],
      extensions: [".js"],
      sourceMap: false,
      ignore: ["taler-wallet", "crypto"],
    }),

    typescript({
      tsconfig: false,
      ...baseTypescriptCompilerSettings,
      sourceMap: false,
    }),
  ],
};

export default [
  walletCli,
  walletAndroid,
  webExtensionPageEntryPoint,
  webExtensionBackgroundPageScript,
  webExtensionCryptoWorker,
];