import React, { Component } from 'react';
import { Container, Table, Icon, Responsive } from 'semantic-ui-react';
import { connect } from 'react-redux';
import { getTrainees, getStaffEvents } from '../../actions/statistics';

class Trainees extends Component {
  componentWillMount() {
    this.props.getTrainees();
    this.props.getStaffEvents();
  }

  // Number of visited events
  VisitedStatusNumber(trainee) {
    return (this.props.events.filter((event) => {
      return event.visitors.includes(trainee.id)
    })).length;
  }

  // Every event with visit status in table cells
  renderVisitedStatus(trainee) {
    return (this.props.events.map((event) => {
      if (event.visitors.includes(trainee.id)) {
        return (
          <Table.Cell textAlign='center'>
            <Icon color='green' name='checkmark' />
          </Table.Cell>
        );
      }
      return (
        <Table.Cell textAlign='center'>
          <Icon color='red' name='cancel' />
        </Table.Cell>
      );
    }));
  }

  // Every event rendered
  renderTraineesWithEvents() {
    return this.props.trainees.map((trainee) =>
    { return (
      <Table.Row>
        <Table.Cell textAlign='center'>
          {trainee.full_name}
        </Table.Cell>
        {this.renderVisitedStatus(trainee)}
      </Table.Row>
    );
    });
  }
  // Only visit number rendered
  renderTraineesWithVisitNum() {
    return this.props.trainees.map((trainee) =>{ 
      return (
        <Table.Row textAlign='center'>
          <Table.Cell>
            {trainee.full_name}
          </Table.Cell>
          <Table.Cell textAlign='center'>
            {`${this.VisitedStatusNumber(trainee)} / ${this.props.events.length}`}
          </Table.Cell>
        </Table.Row>
      );
    });
  }

  // Column for each event
  renderTableHeaderEvents() {
    return (this.props.events.map(event => {
      return (<Table.HeaderCell textAlign='center'>
        {event.name}
      </Table.HeaderCell>
      )
    }));
  }

  render() {
    return (
      <Container textAlign='center'>
        {/* Rendered on larger screens */}
        <Responsive minWidth={600} >
          <Table color='blue' unstackable celled selectable compact>
            <Table.Header>
              <Table.Row>
                <Table.HeaderCell textAlign='center'>
                  Képződők
                </Table.HeaderCell>
                { this.renderTableHeaderEvents() }
              </Table.Row>
            </Table.Header>
            <Table.Body>
              {this.props.trainees ? 
                this.renderTraineesWithEvents() 
              : 
                'Nincsenek képződők'
              }
            </Table.Body>
          </Table>
        </Responsive>
        {/* Rendered on mobile */}
        <Responsive maxWidth={599} >
          <Table color='blue' unstackable celled selectable compact>
            <Table.Header>
              <Table.Row>
                <Table.HeaderCell textAlign='center'>
                  Képződők
                </Table.HeaderCell>
                <Table.HeaderCell textAlign='center'>
                  Részvételi arány
                </Table.HeaderCell>
              </Table.Row>
            </Table.Header>
            <Table.Body>
              {this.props.trainees ? 
                this.renderTraineesWithVisitNum() 
              : 
                'Nincsenek képződők'
              }
            </Table.Body>
          </Table>
        </Responsive>
      </Container>
    );
  }
}

const mapStateToProps = ({ trainees: { trainees }, events: { events }, user }) => ({ trainees, events, user });

export default connect(mapStateToProps, { getTrainees, getStaffEvents })(Trainees);