import React from 'react'
import { withStyles } from '@material-ui/core/styles'
import Container from '@src/js/components/common/form/Container.jsx'
import FolderIcon from '@material-ui/icons/FolderOpen'
import FileIcon from '@material-ui/icons/DescriptionOutlined'
import autoBind from 'auto-bind'

const styles = theme => ({
  content: {
    width: '100%',
    fontFamily: theme.typography.fontFamily,
  },
  tableHeader: {
    textAlign: 'left'
  },
  nameColumn: {
    textAlign: 'left'
  },
  sizeColumn: {
    width: '11rem',
    textAlign: 'left'
  },
  modifiedColumn: {
    width: '11rem',
    textAlign: 'right'
  }
})

class ListView extends React.Component {

  constructor(props, context) {
    super(props, context)
    autoBind(this)
  }

  getIcon(file) {
    if (file.folder) {
      return <FolderIcon />
    } else {
      return <FileIcon />
    }
  }

  render() {
    const { classes, files } = this.props
    /* Create strings in messages. */
    return (
      <Container>
        <table className={classes.content}>
          <thead>
            <tr>
              <th className={classes.tableHeader}>Name</th>
              <th className={classes.tableHeader}>Size</th>
              <th className={classes.tableHeader}>Modified</th>
            </tr>
          </thead>
          <tbody>
            {files.map((file, index) =>
              <tr key={index}>
                <td className={classes.nameColumn}>{<>{this.getIcon(file)} {file.name}</>}</td>
                <td className={classes.sizeColumn}>{file.folder ? '-' : file.size}</td>
                <td className={classes.modifiedColumn}>{file.lastModifiedTime.toLocaleString()}</td>
              </tr>
            )}
          </tbody>
        </table>
      </Container>
    )
  }
}

export default withStyles(styles)(ListView)