import peerDepsExternal from "rollup-plugin-peer-deps-external";
import babel from "@rollup/plugin-babel";
import resolve from "@rollup/plugin-node-resolve";
import commonjs from "@rollup/plugin-commonjs";
import postcss from "rollup-plugin-postcss";
import cssvariables from "postcss-css-variables";
import svgr from "@svgr/rollup";
import url from "@rollup/plugin-url";
import fs from "fs";
import { terser } from "rollup-plugin-terser";

const external = [
  "react",
  "react-dom",
  "react-date-object",
  "react-element-popper",
];

const presets = ["@babel/preset-react", "@babel/preset-env"];

const globals = {
  react: "React",
  "react-date-object": "DateObject",
  "react-element-popper": "ElementPopper",
};

export default [
  {
    input: "src/index.js",
    output: [
      {
        file: "build/index.js",
        format: "cjs",
        plugins: [terser()],
        exports: "named",
      },
    ],
    ...getProps(),
  },
  {
    input: "src/index_browser.js",
    output: [
      {
        file: "build/browser.min.js",
        format: "umd",
        plugins: [terser()],
        name: "ReactMultiDatePicker",
        exports: "named",
        globals,
      },
    ],
    ...getProps(),
  },
  ...build("plugins"),
  ...build("elements"),
];

function getProps() {
  return {
    external,
    plugins: [
      resolve(),
      peerDepsExternal(),
      babel({
        exclude: /node_modules/,
        presets,
      }),
      commonjs(),
      postcss({
        minimize: true,
        plugins: [cssvariables()],
      }),
      svgr(),
      url(),
    ],
  };
}

function build(dirName) {
  return fs.readdirSync("./src/" + dirName).map((path) => {
    let name = path
      .replace(/^./, (w) => w.toUpperCase())
      .replace(/_./g, (w) => w.replace("_", "").toUpperCase());

    return {
      input: `src/${dirName}/${path}/${path}.js`,
      output: [
        {
          file: `${dirName === "elements" ? "components" : dirName}/${path}.js`,
          format: "cjs",
          plugins: [terser()],
          exports: "named",
        },
        {
          file: `build/${path}.browser.js`,
          format: "umd",
          plugins: [terser()],
          name,
          exports: "default",
          globals,
        },
      ],
      ...getProps(),
    };
  });
}