/*
 *  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 { withStyles } from '@material-ui/core/styles'
import messages from '@src/js/common/messages.js'
import Button from '@src/js/components/common/form/Button.jsx'
import ViewComfyIcon from '@material-ui/icons/ViewComfy'
import ViewListIcon from '@material-ui/icons/ViewList'
import PublishIcon from '@material-ui/icons/Publish'
import SettingsIcon from '@material-ui/icons/Settings'
import SearchIcon from '@material-ui/icons/Search'
import InfoIcon from '@material-ui/icons/InfoOutlined'
import CreateNewFolderIcon from '@material-ui/icons/CreateNewFolderOutlined'
import autoBind from 'auto-bind'
import { ToggleButton } from '@material-ui/lab'

const styles = (theme) => ({
  buttons: {
    flex: '0 0 auto',
    display: 'flex',
    whiteSpace: 'nowrap',
    marginBottom: theme.spacing(1),
    '& button': {
      marginRight: theme.spacing(1)
    }
  }
})

class Toolbar extends React.Component {

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

  render() {
    const { viewType, onViewTypeChange, classes, showInfo, onShowInfoChange } =
      this.props
    return (
      <div className={classes.buttons}>
        <ToggleButton
          styles={{ root: classes.button }}
          selected={showInfo}
          onChange={onShowInfoChange}
          value={messages.get(messages.INFO)}
          aria-label={messages.get(messages.INFO)}
          size='small'
        >
          <InfoIcon />
        </ToggleButton>
        <Button
          styles={{ root: classes.button }}
          label={messages.get(messages.NEW_FOLDER)}
          startIcon={<CreateNewFolderIcon />}
        />
        <Button
          styles={{ root: classes.button }}
          label={messages.get(messages.SEARCH)}
          startIcon={<SearchIcon />}
        />
        {viewType === 'list' && (
          <Button
            styles={{ root: classes.button }}
            label={<ViewComfyIcon />}
            onClick={() => onViewTypeChange('grid')}
          />
        )}
        {viewType === 'grid' && (
          <Button
            styles={{ root: classes.button }}
            label={<ViewListIcon />}
            onClick={() => onViewTypeChange('list')}
          />
        )}
        <Button
          styles={{ root: classes.button }}
          label={<SettingsIcon />} />
        <Button
          styles={{ root: classes.button }}
          label={messages.get(messages.UPLOAD)}
          startIcon={<PublishIcon />}
        />
      </div>
    )
  }
}

export default withStyles(styles)(Toolbar)