const html = require('choo/html');
const assets = require('../../common/assets');

function timeLeft(milliseconds) {
  const minutes = Math.floor(milliseconds / 1000 / 60);
  const hours = Math.floor(minutes / 60);
  const seconds = Math.floor((milliseconds / 1000) % 60);
  if (hours >= 1) {
    return `${hours}h ${minutes % 60}m`;
  } else if (hours === 0) {
    return `${minutes}m ${seconds}s`;
  }
  return null;
}

module.exports = function(file, state, emit) {
  const ttl = file.expiresAt - Date.now();
  const remaining = timeLeft(ttl) || state.translate('linkExpiredAlt');
  const row = html`
  <tr id="${file.id}">
    <td class="overflow-col" title="${
      file.name
    }"><a class="link" href="/share/${file.id}">${file.name}</a></td>
    <td class="center-col">
      <img onclick=${copyClick} src="${assets.get(
    'copy-16.svg'
  )}" class="icon-copy" title="${state.translate('copyUrlHover')}">
      <span class="text-copied" hidden="true">${state.translate(
        'copiedUrl'
      )}</span>
    </td>
    <td>${remaining}</td>
    <td class="center-col">
      <img onclick=${showPopup} src="${assets.get(
    'close-16.svg'
  )}" class="icon-delete" title="${state.translate('deleteButtonHover')}">
      <div class="popup">
        <div class="popuptext" onblur=${cancel} tabindex="-1">
          <div class="popup-message">${state.translate('deletePopupText')}</div>
          <div class="popup-action">
            <span class="popup-no" onclick=${cancel}>${state.translate(
    'deletePopupCancel'
  )}</span>
            <span class="popup-yes" onclick=${deleteFile}>${state.translate(
    'deletePopupYes'
  )}</span>
          </div>
        </div>
      </div>
    </td>
  </tr>
  `;

  function copyClick(e) {
    emit('copy', { url: file.url, location: 'upload-list' });
    const icon = e.target;
    const text = e.target.nextSibling;
    icon.hidden = true;
    text.hidden = false;
    setTimeout(() => {
      icon.hidden = false;
      text.hidden = true;
    }, 500);
  }

  function showPopup() {
    const tr = document.getElementById(file.id);
    const popup = tr.querySelector('.popuptext');
    popup.classList.add('show');
    popup.focus();
  }

  function cancel(e) {
    e.stopPropagation();
    const tr = document.getElementById(file.id);
    const popup = tr.querySelector('.popuptext');
    popup.classList.remove('show');
  }

  function deleteFile() {
    emit('delete', { file, location: 'upload-list' });
    emit('render');
  }

  return row;
};