import React, { PureComponent } from 'react';
import PropTypes from 'prop-types';
import styled from 'styled-components';
import {
  ChartCard as Card,
  ChartHeader as Header,
} from '@bufferapp/analyze-shared-components';
import AddReport from '@bufferapp/add-report';

import ChartAndFooter from '../ChartAndFooter';
import Title from '../Title';

const ContentContainer = styled.div`
  position: relative;
  padding: 1rem 1.5rem
`;

class ChartWrapper extends PureComponent {
  render() {
    const {
      metrics,
      profiles,
      profileIds,
      loading,
      metricKey,
    } = this.props;

    return (
      <Card>
        <Header>
          <Title metricKey={metricKey} />
          <AddReport
            chart="comparison"
            state={{
              metricKey,
              profileIds,
              profiles,
            }}
          />
        </Header>
        <ContentContainer>
          <ChartAndFooter
            loading={loading}
            metrics={metrics}
            metricKey={metricKey}
            profiles={profiles}
          />
        </ContentContainer>
      </Card>
    );
  }
}

ChartWrapper.defaultProps = {
  loading: false,
  selectedProfiles: [],
};

ChartWrapper.propTypes = {
  loading: PropTypes.bool,
  metricKey: PropTypes.string.isRequired,
  // props used for generating chart
  metrics: PropTypes.shape({}).isRequired,
  profileIds: PropTypes.arrayOf(PropTypes.string).isRequired,
  profiles: PropTypes.arrayOf(PropTypes.shape({
    id: PropTypes.string.isRequired,
    username: PropTypes.string.isRequired,
    avatarUrl: PropTypes.string.isRequired,
    service: PropTypes.string.isRequired,
  })).isRequired,
};

export default ChartWrapper;

