/** @jsx jsx */
import React from 'react';
import PropTypes from 'prop-types';
import { jsx } from '@emotion/core';
import formatBytes from 'pretty-bytes';
import sortBy from 'sort-by';
function getDirname(name) {
  return (
    name
      .split('/')
      .slice(0, -1)
      .join('/') || '.'
  );
}
function getMatchingEntries(entry, entries) {
  const dirname = entry.name || '.';
  return Object.keys(entries)
    .filter(name => entry.name !== name && getDirname(name) === dirname)
    .map(name => entries[name]);
}
function getRelativeName(base, name) {
  return base.length ? name.substr(base.length + 1) : name;
}
const styles = {
  tableHead: {
    textAlign: 'left',
    padding: '0.5em 1em'
  },
  tableCell: {
    padding: '0.5em 1em'
  },
  evenRow: {
    backgroundColor: '#eee'
  }
};
export default function DirectoryListing({ filename, entry, entries }) {
  const rows = [];
  if (filename !== '/') {
    rows.push(
      
        | .. | - | - | - | 
    );
  }
  const matchingEntries = getMatchingEntries(entry, entries);
  matchingEntries
    .filter(({ type }) => type === 'directory')
    .sort(sortBy('name'))
    .forEach(({ name }) => {
      const relName = getRelativeName(entry.name, name);
      const href = relName + '/';
      rows.push(
        
          | {href} | - | - | - | 
      );
    });
  matchingEntries
    .filter(({ type }) => type === 'file')
    .sort(sortBy('name'))
    .forEach(({ name, size, contentType, lastModified }) => {
      const relName = getRelativeName(entry.name, name);
      rows.push(
        
          | {relName} | {contentType} | {formatBytes(size)} | {lastModified} | 
      );
    });
  return (
    
      
        
          
            | Name | Type | Size | Last Modified | 
        
        
          {rows.map((row, index) =>
            React.cloneElement(row, {
              style: index % 2 ? undefined : styles.evenRow
            })
          )}
        
      
     
  );
}
if (process.env.NODE_ENV !== 'production') {
  const entryType = PropTypes.shape({
    name: PropTypes.string.isRequired
  });
  DirectoryListing.propTypes = {
    filename: PropTypes.string.isRequired,
    entry: entryType.isRequired,
    entries: PropTypes.objectOf(entryType).isRequired
  };
}