import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import classNames from 'classnames';
import tableStyles from 'ba-styles/Table.scss';
import EnhancedTableHead from 'ba-components/Tables/tableParts/TableHeader';
import EnhancedTableToolbar from 'ba-components/Tables/tableParts/TableToolbar';
import { PapperBlock } from 'ba-components';
import {
  Grid,
  FormControl,
  FormLabel,
  FormControlLabel,
  FormGroup,
  RadioGroup,
  Radio,
  Table,
  TableBody,
  TableCell,
  TableRow,
  TablePagination,
  Paper,
  Checkbox,
} from '@material-ui/core';
const styles = theme => ({
  root: {
    width: '100%',
    marginTop: theme.spacing(3),
    overflowX: 'auto',
  },
  demo: {
    height: 240,
  },
  paper: {
    padding: theme.spacing(2),
    height: '100%',
    backgroundColor: theme.palette.secondary.light,
  },
  control: {
    padding: theme.spacing(2),
  },
  settings: {
    padding: 30
  },
});
let counter = 0;
function createData(name, calories, fat, carbs, protein) {
  counter += 1;
  return {
    id: counter,
    name,
    calories,
    fat,
    carbs,
    protein
  };
}
class InteractiveGrid extends React.Component {
  constructor(props, context) {
    super(props, context);
    this.state = {
      order: 'asc',
      orderBy: 'calories',
      selected: [],
      columnData: [
        {
          id: 'name',
          numeric: false,
          disablePadding: false,
          label: 'Dessert (100g serving)'
        }, {
          id: 'calories',
          numeric: true,
          disablePadding: false,
          label: 'Calories'
        }, {
          id: 'fat',
          numeric: true,
          disablePadding: false,
          label: 'Fat (g)'
        }, {
          id: 'carbs',
          numeric: true,
          disablePadding: false,
          label: 'Carbs (g)'
        }, {
          id: 'protein',
          numeric: true,
          disablePadding: false,
          label: 'Protein (g)'
        },
      ],
      data: [
        createData('Cupcake', 305, 3.7, 67, 4.3),
        createData('Donut', 452, 25.0, 51, 4.9),
        createData('Eclair', 262, 16.0, 24, 6.0),
        createData('Frozen yoghurt', 159, 6.0, 24, 4.0),
        createData('Gingerbread', 356, 16.0, 49, 3.9),
        createData('Honeycomb', 408, 3.2, 87, 6.5),
        createData('Ice cream sandwich', 237, 9.0, 37, 4.3),
        createData('Jelly Bean', 375, 0.0, 94, 0.0),
        createData('KitKat', 518, 26.0, 65, 7.0),
        createData('Lollipop', 392, 0.2, 98, 0.0),
        createData('Marshmallow', 318, 0, 81, 2.0),
        createData('Nougat', 360, 19.0, 9, 37.0),
        createData('Oreo', 437, 18.0, 63, 4.0),
      ].sort((a, b) => (a.calories < b.calories ? -1 : 1)),
      page: 0,
      rowsPerPage: 5,
      defaultPerPage: 5,
      filterText: '',
      size: 'medium',
      bordered: false,
      stripped: true,
      hovered: false,
      toolbar: true,
      checkcell: false,
      pagination: true
    };
  }
  handleChangeRadio = key => (event, value) => {
    this.setState({
      [key]: value,
    });
  };
  handleChangeCheck = name => event => {
    this.setState({ [name]: event.target.checked });
  };
  handleRequestSort = (event, property) => {
    const orderBy = property;
    let order = 'desc';
    if (this.state.orderBy === property && this.state.order === 'desc') {
      order = 'asc';
    }
    const data = order === 'desc'
      ? this.state.data.sort((a, b) => (b[orderBy] < a[orderBy] ? -1 : 1))
      : this.state.data.sort((a, b) => (a[orderBy] < b[orderBy] ? -1 : 1));
    this.setState({ data, order, orderBy });
  };
  handleSelectAllClick = (event, checked) => {
    if (checked) {
      this.setState({ selected: this.state.data.map(n => n.id) });
      return;
    }
    this.setState({ selected: [] });
  };
  handleClick = (event, id) => {
    if (!this.state.checkcell) {
      return;
    }
    const { selected } = this.state;
    const selectedIndex = selected.indexOf(id);
    let newSelected = [];
    if (selectedIndex === -1) {
      newSelected = newSelected.concat(selected, id);
    } else if (selectedIndex === 0) {
      newSelected = newSelected.concat(selected.slice(1));
    } else if (selectedIndex === selected.length - 1) {
      newSelected = newSelected.concat(selected.slice(0, -1));
    } else if (selectedIndex > 0) {
      newSelected = newSelected.concat(
        selected.slice(0, selectedIndex),
        selected.slice(selectedIndex + 1),
      );
    }
    this.setState({ selected: newSelected });
  };
  handleChangePage = (event, page) => {
    this.setState({ page });
  };
  handleChangeRowsPerPage = event => {
    this.setState({ rowsPerPage: event.target.value });
  };
  isSelected = id => this.state.selected.indexOf(id) !== -1;
  handleUserInput(value) {
    // Show all item first
    if (value !== '') {
      this.setState({ rowsPerPage: this.state.data.length });
    } else {
      this.setState({ rowsPerPage: this.state.defaultPerPage });
    }
    // Show result base on keyword
    this.setState({ filterText: value.toLowerCase() });
  }
  render() {
    const { classes } = this.props;
    const {
      data,
      order,
      orderBy,
      selected,
      rowsPerPage,
      page,
      filterText,
      size,
      columnData,
      toolbar, pagination, checkcell,
      bordered, stripped, hovered
    } = this.state;
    const emptyRows = rowsPerPage - Math.min(rowsPerPage, data.length - (page * rowsPerPage));
    const renderCell = (dataArray, keyArray) => keyArray.map((itemCell, index) => (
      {dataArray[itemCell.id]}
    ));
    return (
      
        
          
            
              
                
                  
                    Size
                    
                      } label="Small" />
                      } label="Medium" />
                      } label="Big" />
                    
                  
                
                
                  
                    Style
                    
                      
                        )}
                        label="Bordered"
                      />
                      
                        )}
                        label="Strppied"
                      />
                      
                        )}
                        label="Hovered"
                      />
                    
                  
                
                
                  
                    Component
                    
                      
                        )}
                        label="Toolbar"
                      />
                      
                        )}
                        label="Checkbox"
                      />
                      
                        )}
                        label="Pagination"
                      />
                    
                  
                
              
            
            
              
                {toolbar
                  && (
                     this.handleUserInput(event)}
                    />
                  )
                }
                
                  
                    
                    
                      {data.slice(page * rowsPerPage, (page * rowsPerPage) + rowsPerPage).map(n => {
                        const isSelected = this.isSelected(n.id);
                        if (n.name.toLowerCase().indexOf(filterText) === -1) {
                          return false;
                        }
                        return (
                           this.handleClick(event, n.id)}
                            role="checkbox"
                            aria-checked={isSelected}
                            tabIndex={-1}
                            key={n.id}
                            selected={isSelected}
                          >
                            {checkcell
                              && (
                                
                                  
                                
                              )
                            }
                            {renderCell(n, columnData)}
                          
                        );
                      })}
                      {emptyRows > 0 && (
                        
                          
                        
                      )}
                    
                  
                 
                {pagination
                  && (
                    
                  )
                }
              
            
          
         
      
    );
  }
}
InteractiveGrid.propTypes = {
  classes: PropTypes.object.isRequired,
};
export default withStyles(styles)(InteractiveGrid);