#!/usr/bin/env coffee

require 'shelljs/global'

fs = require 'fs'
nodefy = require 'nodefy'
path = require 'path'

MODERNIZR_DIR = do ->
  src = require.resolve 'modernizr/src/Modernizr.js'
  return path.dirname path.join src, '..'

VERSION = "
  #{ require('modernizr/package.json').version }
  (browsernizr #{ require('./../package.json').version })
"

isJavascript = (filename) -> /\.js$/.test filename

stripExtension = (filename) -> filename.replace /\.[a-z0-9]+$/i, ''

findFiles = (location) -> find(location).filter(isJavascript)

do main = ->
  echo "Version: #{ VERSION }"

  workDir = path.resolve __dirname, './../'
  libDir = path.join workDir, './lib'
  testsDir = path.join workDir, './test'

  rm '-rf', "#{ libDir }/*"
  rm '-rf', "#{ testsDir }/*"

  cd MODERNIZR_DIR

  libSources = find 'src'
    .filter isJavascript

  libModules = libSources.map (file) ->
    stripExtension path.basename file

  testSources = find 'feature-detects'
    .filter isJavascript

  testModules = testSources.map (file) ->
    stripExtension file.replace /^feature-detects\//, ''

  moduleMap = {}

  for moduleName in libModules
    moduleMap[moduleName] = "./lib/#{ moduleName }.js"

  for moduleName in testModules
    moduleMap[moduleName] = "./test/#{ moduleName }.js"

  sources = libSources.concat testSources
  modules = libModules.concat testModules

  for file, i in sources
    moduleName = modules[i]
    moduleFile = path.resolve workDir, moduleMap[moduleName]
    moduleDir = path.dirname moduleFile

    echo "module: #{ moduleName }"
    #echo "moduleFile: #{ moduleFile }"

    src = nodefy.parse cat(file), (depName) ->
      echo "  dep: #{ depName }"
      unless depFile = moduleMap[depName]
        return depName
      depFile = path.resolve workDir, depFile
      #echo "  depFile: #{ depFile }"
      return './' + path.relative moduleDir, depFile

    mkdir '-p', moduleDir
    src.to moduleFile

  cd workDir
  cat 'lib/ModernizrProto.js'
    .replace '__VERSION__', VERSION
    .to 'lib/ModernizrProto.js'

  echo "Done"
