import resolve from '@rollup/plugin-node-resolve'
import commonjs from '@rollup/plugin-commonjs'
import bundles from './build/index'
import fs from 'fs'
import path from 'path'
import buble from '@rollup/plugin-buble'
import json from "@rollup/plugin-json"
import image from '@rollup/plugin-image'

function searchImages(dir, images) {
    const files = fs.readdirSync(dir)
    files.forEach((item, index) => {
        var fullPath = path.join(dir, item)
        const stat = fs.statSync(fullPath)
        if (stat.isDirectory()) {
            searchImages(path.join(dir, item), images)
        } else {
            if(fullPath.endsWith('.png')) {
                images.push(fullPath)
            }
        }
    })
    return images
}

const allImages = []
searchImages('src', allImages)

function mkdirsSync(dirname) {
    if (fs.existsSync(dirname)) {
        return true
    } else {
        if (mkdirsSync(path.dirname(dirname))) {
            fs.mkdirSync(dirname)
            return true
        }
    }
}

allImages.forEach((value) => {
    let path = __dirname + '/build/' + value
    let index = path.lastIndexOf('/')
    mkdirsSync(path.substring(0, index))

    fs.copyFile(__dirname + '/' + value, __dirname + '/build/' + value, error => {
        console.log(error)
    })
})


function readDirs(dirPath, files) {
    if (fs.statSync(dirPath).isDirectory()) {
        fs.readdirSync(dirPath).forEach(e => {
            readDirs(path.join(dirPath, e), files)
        })
    } else {
        for (let bundle of bundles) {
            if (dirPath.match(new RegExp(`^${bundle}`))) {
                files.push(dirPath)
            }
        }
    }
}


const dirs = fs.readdirSync('.')
    .filter(e => {
        for (let bundle of bundles) {
            if (bundle.match(new RegExp(`^${e}/`))) {
                return true
            }
        }
        return false
    })

const allFiles = []

dirs.forEach(e => {
    readDirs(e, allFiles)
})
export default
    allFiles
        .map(e => e.replace('.ts', ''))
        .map(bundle => {
            return {
                input: `build/${bundle}.js`,
                output: {
                    format: "cjs",
                    file: `bundle/${bundle}.js`,
                    sourcemap: true,
                },
                plugins: [
                    resolve({ mainFields: ["jsnext"] }),
                    commonjs(),
                    json(),
                    image(),
                ],
                external: ['reflect-metadata', 'doric'],
                onwarn: function (warning) {
                    if (warning.code === 'THIS_IS_UNDEFINED') { return }
                    console.warn(warning.message)
                }
            }
        })
        // If need ES5 support enable following configs
        // .concat(
        //     allFiles
        //         .map(e => e.replace('.ts', ''))
        //         .map(bundle => {
        //             return {
        //                 input: `build/${bundle}.js`,
        //                 output: {
        //                     format: "cjs",
        //                     file: `bundle/${bundle}.es5.js`,
        //                     sourcemap: true,
        //                 },
        //                 plugins: [
        //                     resolve({ mainFields: ["jsnext"] }),
        //                     commonjs(),
        //                     json(),
        //                     buble({
        //                         transforms: { dangerousForOf: true }
        //                     }),
        //                     image(),
        //                 ],
        //                 external: ['reflect-metadata', 'doric'],
        //                 onwarn: function (warning) {
        //                     if (warning.code === 'THIS_IS_UNDEFINED') { return }
        //                     console.warn(warning.message)
        //                 }
        //             }
        //         }))