'use strict';

/**
 * 把时间段转化为时分秒(hh:mm:ss)格式
 * @param {string} format 格式化字符串
 * @param {number} duration 时长，毫秒灵敏
 *
 * // 取两位，分、秒
 * formatDuration('mm:ss', 138000);               // => '02:18'
 * formatDuration('mm:ss', 13325000);             // => '222:05'
 * // 取两位，时、分、秒
 * formatDuration('hh:mm:ss', 13325000);          // => '03:42:05'
 * // 自适应，分、秒
 * formatDuration('m:s', 138000);                 // => '2:18'
 * // 自适应，时、分、秒
 * formatDuration('h:m:s', 162325000);            // => '45:5:25'
 * // 小时部分有则显示
 * formatDuration('(hh:)?mm:ss', 3325000);        // => '55:25'
 * formatDuration('(hh:)?mm:ss', 13325000);       // => '03:42:05'
 * // 其它单位
 * formatDuration('hh 时 mm 分 ss 秒', 16335000);  // => '04 时 32 分 15 秒'
 */
function formatDuration(format, duration) {
  if (!format || !/[hms]/.test(format)) return '';
  if (!duration || duration < 0) duration = 0;
  var hours = Math.floor(duration / 36e5);
  var minuts = Math.floor(duration / 6e4);
  var seconds = Math.floor(duration / 1000);
  var o = {
    h: '',
    m: '',
    s: '',
    hh: '',
    mm: '',
    ss: ''
  };

  if (format.match(/h/)) {
    o.h = hours;
    o.m = Math.floor(seconds % 3600 / 60);
    o.s = Math.floor(seconds % 60);
  } else {
    o.h = 0;
    o.m = minuts;
    o.s = Math.floor(seconds % 60);
  }

  var resut = format.replace(/\(([^)]*hh?[^)]*)\)\?/, function (_, $1) {
    return o.h ? $1 : '';
  });
  ['h', 'm', 's'].forEach(function (x) {
    o[x + x] = o[x] < 10 ? '0' + o[x] : o[x];
    resut = resut.replace(new RegExp(x + '{2,}', 'g'), o[x + x]).replace(new RegExp(x, 'g'), o[x]);
  });
  return resut;
}

module.exports = formatDuration;
