import _ from 'lodash'
import React from 'react'
import autoBind from 'auto-bind'
import { withStyles } from '@material-ui/core/styles'
import Grid from '@src/js/components/common/grid/Grid.jsx'
import QueryLink from '@src/js/components/common/link/QueryLink.jsx'
import UserLink from '@src/js/components/common/link/UserLink.jsx'
import logger from '@src/js/common/logger.js'

const styles = () => ({})

class QueriesGrid extends React.PureComponent {
  constructor(props) {
    super(props)
    autoBind(this)
  }

  render() {
    logger.log(logger.DEBUG, 'QueriesGrid.render')

    const {
      id,
      rows,
      selectedRowId,
      onSelectedRowChange,
      controllerRef
    } = this.props

    return (
      <Grid
        id={id}
        controllerRef={controllerRef}
        header='Queries'
        columns={[
          {
            name: 'name',
            label: 'Name',
            sort: 'asc',
            getValue: ({ row }) => row.name.value,
            renderValue: ({ value }) => {
              return <QueryLink queryName={value} />
            }
          },
          {
            name: 'description',
            label: 'Description',
            getValue: ({ row }) => row.description.value
          },
          {
            name: 'database',
            label: 'Database',
            getValue: ({ row }) => row.database.value
          },
          {
            name: 'queryType',
            label: 'Query Type',
            getValue: ({ row }) => row.queryType.value
          },
          {
            name: 'entityTypeCodePattern',
            label: 'Entity Type Pattern',
            getValue: ({ row }) => row.entityTypeCodePattern.value
          },
          {
            name: 'publicFlag',
            label: 'Public',
            getValue: ({ row }) => row.publicFlag.value
          },
          {
            name: 'registrator',
            label: 'Registrator',
            getValue: ({ row }) => row.registrator.value,
            renderValue: ({ value }) => {
              return <UserLink userId={value} />
            }
          }
        ]}
        rows={rows}
        selectedRowId={selectedRowId}
        onSelectedRowChange={onSelectedRowChange}
      />
    )
  }
}

export default _.flow(withStyles(styles))(QueriesGrid)