noflo = require 'noflo'
slug = require 'slug'

buildDate = (date) ->
  date = new Date unless date
  unless date instanceof Date
    date = new Date date
  iso = date.toISOString()
  iso.substr 0, 10

buildName = (title) ->
  title = '' unless title
  name = slug title
  name = name.toLowerCase()
  name.replace /[^0-9a-z_-]/g, ''

exports.getComponent = ->
  c = new noflo.Component
  c.description = 'Build a Jekyll-compatible filename based on post metadata'
  c.inPorts.add 'in',
    datatype: 'object'
    description: 'Poly post'
  c.outPorts.add 'out',
    datatype: 'string'

  noflo.helpers.WirePattern c,
    in: ['in']
    out: 'out'
    forwardGroups: true
  , (data, groups, out) ->
    if data.path and data.path.indexOf('_posts/') isnt -1
      out.send data.path
      return
    if data.metadata?.sourcePath
      out.send data.metadata.sourcePath
      return
    date = buildDate data.metadata.datePublished
    title = data.title or data.metadata.title or data.metadata.description or data.id or ''
    name = buildName title.substring 0, 60
    extension = 'md'
    out.send "_posts/#{date}-#{name}.#{extension}"
