import moment from 'moment';

/**
 * 將秒數轉換成帶有時間單位的格式
 * @param   {number} second
 * @param   {number} fixedNumber 小數點後幾位
 * @returns {string}        轉換完的格式(ex: 1 day, 6.8 hrs)
 */
export function getTimeLabel(second, fixedNumber = 0) {
  const day = 24 * 60 * 60;
  const hour = 60 * 60;
  const minutes = 60;
  const dd = Math.floor(second / day);
  const hh = Math.floor((second % day) / hour);
  const mm = Math.floor((second % hour) / minutes);

  if(dd > 0){
      return (second / day).toFixed(fixedNumber) + " days"
  }
  else if(hh > 0){
      return ((second % day) / hour).toFixed(fixedNumber) + " hrs"
  }
  else if(mm > 0){
      return ((second % hour) / minutes).toFixed(fixedNumber) + " mins"
  }
  if(second == 0){
      return second + " sec"
  }
  return second + " sec"
}
/**
 * 將秒數轉換成帶有縮寫時間單位的格式
 * @param   {number} second
 * @param   {number} fixedNumber 小數點後幾位
 * @returns {string}        轉換完的格式(ex: 1 d, 6.8 h)
 */
export function simpleTimeLabel(second, fixedNumber = 0) {
  const day = 24 * 60 * 60;
  const hour = 60 * 60;
  const minutes = 60;
  const dd = Math.floor(second / day);
  const hh = Math.floor((second % day) / hour);
  const mm = Math.floor((second % hour) / minutes);

  if(dd > 0){
      return (second / day).toFixed(fixedNumber) + "d"
  }
  else if(hh > 0){
      return ((second % day) / hour).toFixed(fixedNumber) + "h"
  }
  else if(mm > 0){
      return ((second % hour) / minutes).toFixed(fixedNumber) + "m"
  }
  if(second == 0){
      return second + "s"
  }
  return second + "s"
}
/**
 * 跟隨最大值的時間單位，將秒數轉換成帶有縮寫時間單位的格式
 * @param   {number} second 要轉換單位的秒數
 * @param   {number} max 該 data 中的最大值
 * @param   {number} fixedNumber 小數點後幾位
 * @returns {string}        轉換完的格式(ex: 1 d, 6.8 h)
 */
export function followTimeLabel(second, max, fixedNumber = 0) {
  const day = 24 * 60 * 60;
  const hour = 60 * 60;
  const minutes = 60;
  const dd = Math.floor(max / day);
  const hh = Math.floor((max % day) / hour);
  const mm = Math.floor((max % hour) / minutes);
  let maxUnit = '';
  let result;

  maxUnit = dd > 0 ? 'd' : hh > 0 ? 'h' : mm > 0 ? 'm' : 's';
  switch (maxUnit) {
    case 'd':
      result = (second / day).toFixed(fixedNumber) + 'd';
      break;
    case 'h':
      result = ((second % day) / hour).toFixed(fixedNumber) + 'h';
      break;
    case 'm':
      result = ((second % hour) / minutes).toFixed(fixedNumber) + 'm';
      break;
    case 's':
      result = second.toFixed(fixedNumber) + 's';
      break;
  }
  return result;
}
/**
 * 將時間轉換成不同日期單位的格式
 * @param { string } date 日期
 * @param { string } maxX 該 data 最大的日期
 * @param { string } minX 該 data 最小的日期
 */
export function dateLabel(date, maxDate, minDate) {
  // 將時間字串轉換為時間物件
  // new Date(time) 之後不用 getTime()，因為在JavaScript中，日期物件是以時間戳記（timestamp）的形式存儲的。當創建一個新的日期物件時，它內部會自動轉換時間字串為時間戳記。
  date = new Date(date);
  maxDate = new Date(maxDate);
  minDate = new Date(minDate);

  // 計算時間差距
  let timeDiff = maxDate - minDate;

  // 計算相差的月份
  var diffMonths = (maxDate.getFullYear() - minDate.getFullYear()) * 12;
  diffMonths -= minDate.getMonth();
  diffMonths += maxDate.getMonth();

  // 計算相差的日期，要取整數才能接續下方的邏輯判斷 `diffDays > 0`
  // 毫秒 * 秒 * 分鐘 * 小時 = 一天的時間量
  var diffDays = Math.floor(timeDiff / (1000 * 60 * 60 * 24));

  // 計算相差的小時、分鐘、秒
  var diffHours = Math.floor(timeDiff / (1000 * 60 * 60));
  var diffMinutes = Math.floor(timeDiff / (1000 * 60));
  var diffSeconds = Math.floor(timeDiff / 1000);

  // 顯示結果
  if (diffMonths > 0) return moment(date).format('YYYY/MM/DD');
  else if (diffDays > 0) return moment(date).format('MM/DD');
  else if (diffHours > 0) return moment(date).format('MM/DD hh:00');
  else if (diffMinutes > 0) return moment(date).format('MM/DD hh:mm');
  else return moment(date).format('hh:mm:ss');
}
