/* <CoffeeScript>
{utils} = require('tztime')

table = {}
</CoffeeScript> */
/**
 * @class Lumenize.table
 */
/* <CoffeeScript>

table.padToWidth = (s, width, padCharacter = ' ', rightPad = false) ->
  if s.length > width
    return s.substr(0, width)
  padding = new Array(width - s.length + 1).join(padCharacter)
  if rightPad
    return s + padding
  else
    return padding + s

table.toString = (rows, fields, sortBy, descending = false) ->
</CoffeeScript> */
  /**
   * @method toString
   * @member Lumenize.table
   * @param {Object[]} rows
   * @param {Object} [fields] If not provided, it will use the fields found in the first row
   * @param {String} [sortBy] If provided, it will sort the table by this field before returning
   * @param {Boolean} [descending = false] By default, the sort will be ascending, setting this to true will sort descending
   * @return {String} Returns a string for the table in Markdown format
   * 
   *     t = [
   *       {col1: 'hello', col2: 12, col3: true},
   *       {col1: 'goodbye', col2: 120, col3: false},
   *       {col1: 'yep', col2: -23, col3: true},
   *     ]
   * 
   *     console.log(require('../').table.toString(t, null, 'col2', true))
   *     # | col1    | col2 | col3  |
   *     # | ------- | ---- | ----- |
   *     # | goodbye | 120  | false |
   *     # | hello   | 12   | true  |
   *     # | yep     | -23  | true  |
   * 
   */
/* <CoffeeScript>
  unless fields?
    fields = []
    for key, value of rows[0]
      fields.push(key)
  maxWidths = []
  for field, index in fields
    maxWidths.push(field.length)  # !TODO: Support for Markdown style justification |:---:| or |---:| and number formatting
    for row in rows
      maxWidths[index] = Math.max(maxWidths[index], row[field]?.toString().length or 0)

  if sortBy?
    sortedRows = utils._.sortBy(rows, sortBy)
    if descending
      sortedRows = sortedRows.reverse()
  else
    sortedRows = rows

  s = '|'
  for field, index in fields
    s += ' '
    s += table.padToWidth(field, maxWidths[index], undefined, true) + ' |'  # !TODO: Change undefined for justification

  s += '\n|'
  for field, index in fields
    s += ' '
    s += table.padToWidth('', maxWidths[index], '-', true) + ' |'  # !TODO: Add colons for justification

  for row in sortedRows
    s += '\n|'
    for field, index in fields
      s += ' '
      s += table.padToWidth(row[field]?.toString() or '', maxWidths[index], undefined, true) + ' |'  # !TODO: Change undefined for justification

  return s

exports.table = table
</CoffeeScript> */