import React from 'react'
import PropTypes from 'prop-types'

import Table, {withPagination} from 'react-uikit/table'
import TradeTableHead from 'components/trade-table-head'

const PaginatedTable = withPagination(Table)

import styles from './styles.scss'
import BEMModule from 'utils/bem'
const bem = new BEMModule(styles)

const TradeTable = ({
    currentPage,
    data,
    headProps,
    linkToInfo,
    pageCount,
    renderEmpty,
    renderRow,
    rowProps,
    tableHead,
    onPageChange,
}) => {
    const paginationClassNames = bem.classNames('c-trade-table__pagination')

    return (
        <React.Fragment>
            <PaginatedTable
                alternate
                currentPage={currentPage}
                data={data}
                headProps={headProps}
                pageCount={pageCount}
                paginationClassName={paginationClassNames}
                renderEmpty={renderEmpty}
                renderHead={TradeTableHead}
                renderRow={renderRow}
                rowProps={rowProps}
                scrollToTopOnPageChange
                tableHead={tableHead}
                onPageChange={onPageChange}
            />
            <footer>
                {linkToInfo && (
                    <a
                        href={linkToInfo}
                        title="Learn how to read the data in this table."
                        target="_blank"
                        rel="noopener noreferrer"
                    >
                        How to read this data?
                    </a>
                )}
            </footer>
        </React.Fragment>
    )
}

TradeTable.propTypes = {
    currentPage: PropTypes.number,
    data: PropTypes.array,
    headProps: PropTypes.object,
    linkToInfo: PropTypes.string,
    pageCount: PropTypes.number,
    renderEmpty: PropTypes.func,
    renderRow: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
    rowProps: PropTypes.object,
    tableHead: PropTypes.array,
    onPageChange: PropTypes.func,
}

export default TradeTable
