// Copyright 2022 The Pigweed Authors
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.

import commonjs from '@rollup/plugin-commonjs';
import resolve from '@rollup/plugin-node-resolve';
import pluginTypescript from '@rollup/plugin-typescript';
import path from 'path';
import nodePolyfills from 'rollup-plugin-node-polyfills';
import postcss from 'rollup-plugin-postcss'
import sourceMaps from 'rollup-plugin-sourcemaps';

export default [
  // Bundle proto collection script
  {
    input: path.join('pw_protobuf_compiler', 'ts', 'build.ts'),
    output: [{
      file: path.join('dist', 'bin', 'pw_protobuf_compiler.js'),
      format: 'cjs',
      banner: '#!/usr/bin/env node\n\nconst window = null;'
    }],
    plugins: [
      pluginTypescript(
          {tsconfig: './tsconfig.json', exclude: ['**/*_test.ts']}),
      resolve(),
      commonjs(),

      // Resolve source maps to the original source
      sourceMaps()
    ]
  },
  // bundle proto collection template used by the above script
  {
    input: path.join(
        'pw_protobuf_compiler', 'ts', 'ts_proto_collection.template.ts'),
    output: [{
      file: path.join('dist', 'bin', 'ts_proto_collection.template.js'),
      format: 'esm',
      banner: '/* eslint-disable */'
    }],
    plugins: [
      pluginTypescript(
          {tsconfig: './tsconfig.json', exclude: ['**/*_test.ts']}),
      resolve(),
      commonjs(),

      // Resolve source maps to the original source
      sourceMaps()
    ]
  },
  // Bundle proto collection into one UMD file for consumption from browser
  {
    input: path.join('dist', 'protos', 'collection.ts'),
    output: [{
      file: path.join('dist', 'protos', 'collection.umd.js'),
      format: 'umd',
      sourcemap: true,
      name: 'PigweedProtoCollection',
    }],
    plugins: [
      pluginTypescript({tsconfig: './tsconfig.json'}),
      commonjs(),
      resolve(),

      // Resolve source maps to the original source
      sourceMaps()
    ]
  },
  // Bundle Pigweed log component and modules
  {
    input: path.join('ts', 'logging.ts'),
    output: [
      {
        file: path.join('dist', 'logging.umd.js'),
        format: 'umd',
        sourcemap: true,
        name: 'PigweedLogging',
        inlineDynamicImports: true
      },
      {
        file: path.join('dist', 'logging.mjs'),
        format: 'esm',
        sourcemap: true,
        inlineDynamicImports: true
      }
    ],
    plugins: [
      postcss({plugins: []}),
      pluginTypescript(
          {tsconfig: './tsconfig.json', exclude: ['**/*_test.ts']}),
      nodePolyfills(),
      resolve(),
      commonjs(),

      // Resolve source maps to the original source
      sourceMaps()
    ]
  },
  // Bundle Pigweed modules
  {
    input: path.join('ts', 'index.ts'),
    output: [
      {
        file: path.join('dist', 'index.umd.js'),
        format: 'umd',
        sourcemap: true,
        name: 'Pigweed',
      },
      {
        file: path.join('dist', 'index.mjs'),
        format: 'esm',
        sourcemap: true,
      }
    ],
    plugins: [
      pluginTypescript(
          {tsconfig: './tsconfig.json', exclude: ['**/*_test.ts']}),
      nodePolyfills(),
      resolve(),
      commonjs(),

      // Resolve source maps to the original source
      sourceMaps()
    ]
  }
];
