/*
 *  Copyright ETH 2023 Zürich, Scientific IT Services
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 */

import React from 'react'

import autoBind from 'auto-bind'
import Container from '@src/js/components/common/form/Container.jsx'
import Table from '@material-ui/core/Table'
import TableBody from '@material-ui/core/TableBody'
import TableCell from '@material-ui/core/TableCell'
import TableRow from '@material-ui/core/TableRow'
import Header from '@src/js/components/common/form/Header.jsx'
import ItemIcon from '@src/js/components/database/data-browser/ItemIcon.jsx'
import { withStyles } from '@material-ui/core/styles'
import messages from '@src/js/common/messages.js'

const styles = () => ({
  container: {
    position: 'sticky',
    overflowX: 'hidden',
    overflowY: 'auto',
    width: '24rem'
  },
  icon: {
    verticalAlign: 'middle',
    fontSize: '12rem'
  },
  fileName: {
    whiteSpace: 'nowrap',
    '& *': {
      whiteSpace: 'nowrap',
      overflow: 'hidden',
      textOverflow: 'ellipsis'
    }
  }
})

class InfoPanel extends React.Component {
  constructor(props, context) {
    super(props, context)
    autoBind(this)
  }

  render() {
    const {
      classes,
      selectedFile,
      configuration
    } = this.props

    return (selectedFile &&
      <Container className={classes.container}>
        <span className={classes.fileName}>
          <Header size='big'>{selectedFile.name}</Header>
        </span>
        <ItemIcon file={selectedFile} classes={classes} configuration={configuration} />
        <Table>
          <TableBody>
            <TableRow>
              <TableCell variant='head' component='th'>{messages.get(messages.SIZE)}</TableCell>
              <TableCell>{selectedFile.size}</TableCell>
            </TableRow>
            <TableRow>
              <TableCell variant='head' component='th'>{messages.get(messages.CREATED)}</TableCell>
              <TableCell>{selectedFile.creationTime.toLocaleString()}</TableCell>
            </TableRow>
            <TableRow>
              <TableCell variant='head' component='th'>{messages.get(messages.MODIFIED)}</TableCell>
              <TableCell>{selectedFile.lastModifiedTime.toLocaleString()}</TableCell>
            </TableRow>
            <TableRow>
              <TableCell variant='head' component='th'>{messages.get(messages.ACCESSED)}</TableCell>
              <TableCell>{selectedFile.lastAccessTime.toLocaleString()}</TableCell>
            </TableRow>
          </TableBody>
        </Table>
      </Container>
    )
  }
}

export default withStyles(styles)(InfoPanel)