const html = require('choo/html');
const number = require('../../utils').number;
const bytes = require('../../utils').bytes;
const fileIcon = require('../fileIcon');

module.exports = function(file, state) {
  const ttl = file.expiresAt - Date.now();
  const remainingTime =
    timeLeft(ttl, state) || state.translate('linkExpiredAlt');
  const downloadLimit = file.dlimit || 1;
  const totalDownloads = file.dtotal || 0;

  const multiFiles = file.manifest.files;
  const fileName =
    multiFiles.length > 1
      ? `${multiFiles[0].name} + ${state.translate('fileCount', {
          num: multiFiles.length - 1
        })}`
      : file.name;

  const activeClass = isOnSharePage() ? 'fileToast--active' : '';
  return html`
    <li id="${file.id}">
      <a class="fileToast ${activeClass}" href=${toastClick()}>
        <div class="fileToast__content">
          ${fileIcon(file.name, file._hasPassword)}
          <div class="fileData">
            <p class="fileName">${fileName}</p>
            <p class="fileInfo">
              <span>${bytes(file.size)}</span> ยท 
              <span>${state.translate('downloadCount', {
                num: `${number(totalDownloads)} / ${number(downloadLimit)}`
              })}</span>
              <span>${remainingTime}</span>
            </p>
          </div>
        </div>
      </a>
    </li>
  `;

  function toastClick() {
    return isOnSharePage() ? '/' : `/share/${file.id}`;
  }

  function isOnSharePage() {
    return state.href.includes('/share/') && state.params.id === file.id;
  }
};

function timeLeft(milliseconds, state) {
  const minutes = Math.floor(milliseconds / 1000 / 60);
  const hours = Math.floor(minutes / 60);
  const days = Math.floor(hours / 24);
  if (days >= 1) {
    return state.translate('expiresDaysHoursMinutes', {
      days,
      hours: hours % 24,
      minutes: minutes % 60
    });
  }
  if (hours >= 1) {
    return state.translate('expiresHoursMinutes', {
      hours,
      minutes: minutes % 60
    });
  } else if (hours === 0) {
    if (minutes === 0) {
      return state.translate('expiresMinutes', { minutes: '< 1' });
    }
    return state.translate('expiresMinutes', { minutes });
  }
  return null;
}