'use strict'
const webpack = require('webpack')
const through2 = require('through2')
const path = require('path')
const gulp = require('gulp')
const readline = require('readline')
const fs = require('fs')

const rimraf = require('rimraf')
const mkdirp = require('mkdirp')

const cwd = process.cwd()

function dist (done) {
  rimraf.sync(path.join(cwd, 'site-dist'))
  process.env.RUN_ENV = 'PRODUCTION'
  const webpackConfig = require(path.join(cwd, 'webpack.site.config.js'))
  webpack(webpackConfig, (err, stats) => {
    if (err) {
      console.error(err.stack || err)
      if (err.details) {
        console.error(err.details)
      }
      return
    }

    const info = stats.toJson()

    if (stats.hasErrors()) {
      console.error(info.errors)
    }

    if (stats.hasWarnings()) {
      console.warn(info.warnings)
    }

    const buildInfo = stats.toString({
      colors: true,
      children: true,
      chunks: false,
      modules: false,
      chunkModules: false,
      hash: false,
      version: false,
    })
    console.log(buildInfo)
    done(0)
  })
}

function copyHtml () {
  const rl = readline.createInterface({
    input: fs.createReadStream(path.join(cwd, 'site/demoRoutes.js')),
  })

  rl.on('line', (line) => {
    if (line.indexOf('path:') > -1) {
      const name = line.split("'")[1].split("'")[0]
      console.log('create path:', name)
      const toPaths = [
        `site-dist/components/${name}`,
        // `site-dist/components/${name}-cn`,
        `site-dist/iframe/${name}`,
        // `site-dist/iframe/${name}-cn`,
      ]
      toPaths.forEach(toPath => {
        rimraf.sync(path.join(cwd, toPath))
        mkdirp(path.join(cwd, toPath), function () {
          fs.writeFileSync(path.join(cwd, `${toPath}/index.html`), fs.readFileSync(path.join(cwd, 'site-dist/index.html')))
        })
      })
    }
  })
  const source = [
    'docs/vue/*.md',
    '*.md',
    // '!components/vc-slider/**/*', // exclude vc-slider
  ]
  gulp.src(source).pipe(through2.obj(function z (file, encoding, next) {
    const paths = file.path.split('/')
    const name = paths[paths.length - 1].split('.')[0].toLowerCase()
    const toPaths = [
      'site-dist/docs',
      'site-dist/docs/vue',
      `site-dist/docs/vue/${name}`,
      `site-dist/docs/vue/${name}-cn`,
    ]
    toPaths.forEach(toPath => {
      mkdirp(path.join(cwd, toPath), function () {
        fs.writeFileSync(path.join(cwd, `${toPath}/index.html`), fs.readFileSync(path.join(cwd, 'site-dist/index.html')))
      })
    })
    next()
  }))
}

gulp.task('site-dist', (done) => {
  dist(() => {
    copyHtml()
  })
})
gulp.task('copy-html', () => {
  copyHtml()
})