import commonjs from '@rollup/plugin-commonjs';
import resolve from '@rollup/plugin-node-resolve';
import terser from '@rollup/plugin-terser';
import typescript from '@rollup/plugin-typescript';
import livereload from 'rollup-plugin-livereload';
import postcss from 'rollup-plugin-postcss';
import svelte from 'rollup-plugin-svelte';
import sveltePreprocess from 'svelte-preprocess';

const production = ! process.env.ROLLUP_WATCH;
const runServer = !! process.env.SERVE;

// function serve() {
// 	let server;

// 	function toExit() {
// 		if (server) server.kill(0);
// 	}

// 	return {
// 		writeBundle() {
// 			if (server) return;
// 			server = require('child_process').spawn('npm', ['run', 'start', '--', '--dev'], {
// 				stdio: ['ignore', 'inherit', 'inherit'],
// 				shell: true
// 			});

// 			process.on('SIGTERM', toExit);
// 			process.on('exit', toExit);
// 		}
// 	};
// }

export default {
	input: 'app-ui/src/jetpack-inspect.ts',
	output: {
		sourcemap: true,
		format: 'iife',
		name: 'app',
		file: 'app-ui/build/jetpack-inspect.js',
	},
	plugins: [
		svelte( {
			preprocess: sveltePreprocess( { sourceMap: ! production } ),
			compilerOptions: {
				// enable run-time checks when not in production
				dev: ! production,
			},
		} ),
		// we'll extract any component CSS out into
		// a separate file - better for performance
		postcss( {
			extensions: [ '.css', '.sss', '.pcss', '.sass', '.scss' ],
			extract: 'jetpack-inspect.css',
			minimize: production,
			sourceMap: true,
		} ),

		// 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/plugins/tree/master/packages/commonjs
		resolve( {
			browser: true,
			dedupe: [ 'svelte' ],
		} ),
		commonjs(),
		typescript( {
			sourceMap: ! production,
			inlineSources: ! production,
		} ),

		// In dev mode, call `npm run start` once
		// the bundle has been generated
		// runServer && serve(),

		// Watch the `public` directory and refresh the
		// browser on changes when not in production
		runServer && livereload( 'app-ui/build/*' ),

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