'use strict';

import React from 'react';

import TableHeaderItemCarret from './table_header_item_carret';

let TableHeaderItem = React.createClass({

    propTypes: {
        displayElement: React.PropTypes.oneOfType([
            React.PropTypes.string,
            React.PropTypes.element
        ]).isRequired,
        columnName: React.PropTypes.string.isRequired,
        canBeOrdered: React.PropTypes.bool,
        changeOrder: React.PropTypes.func,
        orderAsc: React.PropTypes.bool,
        orderBy: React.PropTypes.string,
        className: React.PropTypes.string
    },

    changeOrder() {
        this.props.changeOrder(this.props.columnName, !this.props.orderAsc);
    },

    render() {
        const { canBeOrdered, changeOrder, className, columnName, displayElement, orderAsc, orderBy } = this.props;

        if (canBeOrdered && changeOrder && orderAsc != null && orderBy) {
            if (columnName === orderBy) {
                return (
                    <th
                        className={'ascribe-table-header-column ' + className}
                        onClick={this.changeOrder}>
                        <span>{displayElement} <TableHeaderItemCarret orderAsc={orderAsc} /></span>
                    </th>
                );
            } else {
                return (
                    <th
                        className={'ascribe-table-header-column ' + className}
                        onClick={this.changeOrder}>
                        <span>{displayElement}</span>
                    </th>
                );
            }
        } else {
            return (
                <th className={'ascribe-table-header-column ' + className}>
                    <span>
                        {displayElement}
                    </span>
                </th>
            );
        }
    }
});

export default TableHeaderItem;