/*
 * local.gulpfile.ts
 */

import * as gulp from 'gulp'
import * as inject from 'gulp-inject'
import * as replace from 'gulp-replace'

const buildReadMe = () => {
  // It's not necessary to read the files (will speed up things), we're only after their paths:
  const timplaConfigInterface = gulp.src('gulpfile.ts/lib/TIMPLA_INTERFACES.ts')
  const timplaConfig = gulp.src('.timplaconfig.js').pipe(replace('./lib/public', 'timpla'))
  const babelConfig = gulp.src('babel.config.js')

  const transformJSCodeBlock = (filePath: string, file: any) => {
    const utText = file.contents.toString('utf8')
    const extractMatches = utText.match(/\/\/(.?)@extract([\s\S]*?)@endextract/gi)
    const contents = !!extractMatches
      ? extractMatches.join('').replace(/\/\/.?@(end)?extract/g, '')
      : utText
    const extensionMatchers: any = {
      js: 'javascript',
      md: 'markdown',
      sh: 'shell',
      ts: 'typescript',
    }
    const ext = filePath.split('.').pop()!
    const extToUse = extensionMatchers[ext] || ext

    // return file contents as string
    return ['```' + extToUse, contents, '```'].join('\n')
  }

  return gulp
    .src('local.gulpfile.ts/README.md')
    .pipe(
      inject(timplaConfigInterface, {
        starttag: '<!-- inject:timpla_config:{{ext}} -->',
        transform: transformJSCodeBlock,
      })
    )
    .pipe(
      inject(timplaConfig, {
        starttag: '<!-- inject:timpla_config_basic:{{ext}} -->',
        transform: transformJSCodeBlock,
      })
    )
    .pipe(
      inject(babelConfig, {
        starttag: '<!-- inject:babel:{{ext}} -->',
        transform: transformJSCodeBlock,
      })
    )
    .pipe(gulp.dest('./'))
}

export default buildReadMe
