noflo = require 'noflo'
uri = require 'urijs'

cleanUpHost = (host = '') ->
  host = host.replace('www.', '')
  host = host.replace('blog.', '')
  host

exports.getComponent = ->
  c = new noflo.Component
  c.description = 'Copy item metadata to shared block'
  c.inPorts.add 'in',
    datatype: 'object'
  c.outPorts.add 'out',
    datatype: 'object'

  noflo.helpers.WirePattern c,
    in: 'in'
    out: 'out'
    forwardGroups: true
    async: true
  , (item, groups, out, callback) ->
    if item.options?.via?.url
      item.metadata = {} unless item.metadata
      item.metadata.via = item.options.via
      item.metadata.via.domain = uri(item.metadata.via.url).hostname()
      item.metadata.via.name = cleanUpHost(item.metadata.via.domain) unless item.metadata.via.name
      delete item.options.via

    unless item.content?.length
      out.send item
      do callback
      return

    item.content = item.content.map (b) ->
      return b unless item.metadata
      b.metadata = b.metadata or {}

      if item.content.length > 1
        return b unless b.type in ['video', 'image', 'article', 'quote', 'code', 'audio']

      for k, v of item.metadata
        continue if b.metadata[k]
        b.metadata[k] = v
      b
    out.send item
    do callback
