import './News.css';

import { Button, Container, Grid, Item, Segment } from 'semantic-ui-react';
import React, { Component } from 'react';
import { deleteNews, getNews, setSelectedNews } from '../../actions/news';

import AddNewsForm from '../forms/AddNewsForm';
import ConfirmModal from '../forms/ConfirmModal';
import EditNewsForm from '../forms/EditNewsForm';
import { connect } from 'react-redux';
import moment from 'moment';

class News extends Component {
  UNSAFE_componentWillMount() {
    this.props.getNews();
  }

  renderNews() {
    return this.props.news.map((item) => (
      <Item key={item.id}>
        <Item.Content>
          <Container text textAlign="left">
            <Item.Header style={{ fontSize: '2em', width: '100%' }}>
              <Grid>
                <Grid.Column
                  floated="left"
                  width={this.props.user.role === 'Staff' ? 12 : 16}
                >
                  {item.title}
                </Grid.Column>
                {this.props.user.role === 'Staff' ? (
                  <Grid.Column floated="right" width={4}>
                    <EditNewsForm
                      onClick={() => this.props.setSelectedNews(item)}
                    />
                    <ConfirmModal
                      text={`törölni akarod a következő hírt: ${item.title}`}
                      button={
                        <Button compact color="red" size="mini">
                          Törlés
                        </Button>
                      }
                      onAccept={() => this.props.deleteNews(item)}
                    />
                  </Grid.Column>
                ) : null}
              </Grid>
            </Item.Header>
            <Item.Meta style={{ fontSize: '0.75em', fontStyle: 'italic' }}>
              Közzétéve:
              {moment(item.created_at).format('LLLL')}
            </Item.Meta>
            <Item.Description className="news-text" style={{ fontSize: '1em' }}>
              {this.renderMultiLine(item.text)}
            </Item.Description>
          </Container>
        </Item.Content>
      </Item>
    ));
  }

  renderMultiLine = (text) => {
    const strings = text.split('\n');
    return strings.map((string) => <p key={Math.random()}>{string}</p>);
  };

  render() {
    return (
      <div style={{ paddingTop: '1em', paddingBottom: '5em' }}>
        <Segment vertical>
          {/*  { this.props.user.is_superuser ? <AddNewsForm /> : ''} */}
          <Container text textAlign="center">
            {this.props.user.role === 'Staff' ? <AddNewsForm /> : null}
            <Item.Group divided>{this.renderNews()}</Item.Group>
          </Container>
        </Segment>
      </div>
    );
  }
}

const mapStateToProps = ({ news, user }) => ({ news, user });

export default connect(mapStateToProps, {
  getNews,
  deleteNews,
  setSelectedNews,
})(News);