# Copyright (c) 2013 Maurizio Casimirri <maurizio.cas@gmail.com>
# (https://github.com/mcasimir)

# Permission is hereby granted, free of charge, to any person obtaining a copy of
# this software and associated documentation files (the "Software"), to deal in
# the Software without restriction, including without limitation the rights to
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
# the Software, and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:

# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

#= if not building
Path         = require('path')
_            = require('underscore')
SourceType   = require('./source_type')
#= else
#= require './source_type.coffee'
#= end

class SourceTypeRegister
  constructor: () ->  
    @extensions = {}
    @types = {}

  add: (types) ->
    for name, opts of types
      @types[name] = new SourceType(name, opts.delimiters)
      for extname in (opts.extensions or [])
        @extensions[extname] = name

  byName: (name) ->
    @types[name]

  byExt: (extname) ->
    typeName = @extensions[extname]
    @byName typeName

  byFileName: (filename) ->
    retVal = @byExt Path.extname(filename)
    if not retVal?
      throw new Error("Unknown source type for '#{filename}'")
    retVal

  knownExtensions: () ->
    _.keys(@extensions)

#= if not building
module.exports = SourceTypeRegister
#= end
