###
pug[.default=vanilla]
pug.plain:<pathspec>?pug.compile..=..&pug.merge..=..
pug.vanilla:<pathspec>?style=sitefile-document
pug.rjs:<pathspec>?main=default-requirejs
###
_ = require 'lodash'
path = require 'path'
sitefile = require '../sitefile'

escape = require 'escape-html'

pug_ext = ( pug ) ->
  pug.filters.code = ( block ) ->
    escape block
  
  pug.filters['lorem-ipsum-filler-body'] = ( block ) ->
    # not really LI but need a filler
    """
   <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium
   doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore
   veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim
   ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia
   consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque
   porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur,
   adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et
   dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis
   nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex
   ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea
   voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem
   eum fugiat quo voluptas nulla pariatur?</p>
  
   <p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis
   praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias
   excepturi sint occaecati cupiditate non provident, similique sunt in culpa
   qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum
   quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum
   soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime
   placeat facere possimus, omnis voluptas assumenda est, omnis dolor
   repellendus.
   Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus
   saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae.
   Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis
   voluptatibus maiores alias consequatur aut perferendis doloribus asperiores
   repellat.</p>
  """


# Given sitefile-context, export metadata for pug: handlers
module.exports = ( ctx ) ->

  try
    pug = require 'pug'
  catch
    return

  pug_ext pug


  compilePug = ( opts ) ->

    # Compile template from file
    tpl = pug.compileFile opts.tpl, opts.compile

    # Merge with options and context
    tpl opts.merge


  name: 'pug'
  label: 'Pug templates'
  usage: """
    pug:**/*.pug
  """

  compile: compilePug

  defaults:
    global:
      default:
        'export-query-path': 'tpl'
        'export-context': 'merge.context'
        'import-query': [ 'merge.format', 'merge.scripts', 'merge.stylesheets' ]
        options:
          tpl: null
          compile:
            pretty: false
            debug: false
            compileDebug: false
            globals: []
            filters: {}
          merge:
            format: 'html'
            links: []
            stylesheets: []
            scripts: []
            clients: []

  # generators for Sitefile route handlers
  generate:
    default: ( rctx ) ->
      ( req, res ) ->
        opts = rctx.req_opts req
        sitefile.log \
          "Pug compile", path: opts.tpl, '(Spec', path: rctx.res.path, ')'
        res.type opts.merge.format
        res.write compilePug opts
        res.end()


