import svelte from 'rollup-plugin-svelte';
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
import url from 'rollup-plugin-url';
import livereload from 'rollup-plugin-livereload';
import { terser } from 'rollup-plugin-terser';
import builtins from 'rollup-plugin-node-builtins';
import nodeglobals from 'rollup-plugin-node-globals';
import copy from 'rollup-plugin-copy';
import browsersync from "rollup-plugin-browsersync";
import proxy from "http-proxy-middleware";

const target = 'http://localhost:4001/_builder';
const _builderProxy =  proxy('/_builder', {
  target:"http://localhost:3000",
  pathRewrite: {'^/_builder' : ''}
});

const apiProxy =  proxy('/_builder/api', {
	target,
	logLevel: "debug",
	changeOrigin: true,
	cookieDomainRewrite: true,
	onProxyReq(proxyReq) {
	  if (proxyReq.getHeader("origin")) {
		proxyReq.setHeader("origin", target)
	  }
	}
  });

const production = !process.env.ROLLUP_WATCH;

const lodash_fp_exports = ["union", "reduce", "isUndefined", "cloneDeep", "split", "some", "map", "filter", "isEmpty", "countBy", "includes", "last", "find", "constant", 
"take", "first", "intersection", "mapValues", "isNull", "has", "isNumber", "isString", "isBoolean", "isDate", "isArray", "isObject", "clone", "values", "keyBy", 
"keys", "orderBy", "concat", "reverse", "difference", "merge", "flatten", "each", "pull", "join", "defaultCase", "uniqBy", "every", "uniqWith", "isFunction", "groupBy", 
"differenceBy", "intersectionBy", "isEqual", "max", "sortBy", "assign"];

const lodash_exports = ["toNumber", "flow", "isArray", "join", "replace", "trim", "dropRight", "takeRight", "head", "isUndefined", "isNull", "isNaN", "reduce", "isEmpty", 
"constant", "tail", "includes", "startsWith", "findIndex", "isInteger", "isDate", "isString", "split", "clone", "keys", "isFunction", "merge", "has", "isBoolean", "isNumber", 
"isObjectLike", "assign", "some", "each", "find", "orderBy", "union", "cloneDeep"];

const outputpath = "../server/builder";

export default {
	input: 'src/main.js',
	output: {
		sourcemap: true,
		format: 'iife',
		name: 'app',
		file: `${outputpath}/bundle.js`
	},
	plugins: [
		copy({
			targets: [
				{ src: 'src/index.html', dest: outputpath },
				{ src: 'src/favicon.png', dest: outputpath }
			  ]
		}),

		svelte({
			// enable run-time checks when not in production
			dev: !production,
			include: 'src/**/*.svelte',
			// we'll extract any component CSS out into
			// a separate file — better for performance
			css: css => {
				css.write(`${outputpath}/bundle.css`);
			}
		}),

		// If you have external dependencies installed from
		// npm, you'll most likely need these plugins. In
		// some cases you'll need additional configuration —
		// consult the documentation for details:
		// https://github.com/rollup/rollup-plugin-commonjs
		resolve({
			browser: true,
			dedupe: importee => importee === 'svelte' || importee.startsWith('svelte/')
		
		}),
		commonjs({
			namedExports: {
				"lodash/fp": lodash_fp_exports,
				"lodash":lodash_exports,
				"shortid": ["generate"]
			},
			include: /node_modules/
		}),
		url({
			limit: 0, 
			include: ["**/*.woff2", "**/*.png"], 
			fileName: "[dirname][name][extname]",
			emitFiles: true
		}),
		url({
			limit: 0, 
			include: ["**/*.css"], 
			fileName: "[name][extname]",
			emitFiles: true
		}),
		builtins(),
		nodeglobals(),

		// Watch the `dist` directory and refresh the
		// browser on changes when not in production
		!production && livereload(outputpath),
		!production && browsersync({
			server: outputpath,
			middleware: [_builderProxy, apiProxy]
		}),

		// If we're building for production (npm run build
		// instead of npm run dev), minify
		production && terser()
	],
	watch: {
		clearScreen: false
	}
};
