import React, { Component, PropTypes } from "react";
import {
  MenuItem,
  List,
  RaisedButton,
  SelectField,
  Subheader
} from "material-ui";
import AwardDetailItem from "./AwardDetailItem";
import AwardSummaryHeader from "./AwardSummaryHeader";

const toArray = arg => (Array.isArray(arg) ? [...arg] : [arg]);

export default class FinancialAidAwards extends Component {
  constructor(props) {
    super(props);
    this.state = { value: 0 };
  }

  handleChange = (event, index, value) => this.setState({ value });

  render() {
    try {
      const { data, isFetching } = this.props;
      const awardSummary = data ? data.awardSummary : null;

      const needButton = (element, index, array) =>
        element.aidYear === awardSummary.aidYear &&
        element.acceptdeclineawards === "Y";

      if (!isFetching && data && awardSummary) {
        // No financial aid awards
        if (
          awardSummary.sfaMsgLong ===
          "You have no financial aid awards available for viewing."
        ) {
          return (
            <div style={{ textAlign: "center" }}>
              <br />No financial aid awards found.<br />
              <br />
            </div>
          );
        }
        // Finacial Aid Data
        const lov = data.lov.values.value;
        return (
          <div>
            <SelectField
              value={this.state.value}
              onChange={this.handleChange}
              fullWidth
            >
              {toArray(lov).map((item, counter) => (
                <MenuItem
                  key={counter}
                  value={counter}
                  primaryText={item.aidyeardescription}
                />
              ))}
            </SelectField>
            <List>
              <Subheader>Aid Year Totals</Subheader>
              <AwardSummaryHeader
                offeredBalance={awardSummary.offerBalance}
                acceptedBalance={awardSummary.acceptBalance}
                disbursedBalance={awardSummary.disbursedBalance}
              />
              <Subheader>Itemized Awards</Subheader>
              {toArray(awardSummary.studentAwardDetail)
                .filter(award => award.sfaAwardStatus === "O")
                .sort(
                  (a, b) =>
                    a.itemTypeLovdescr.toUpperCase() <
                    b.itemTypeLovdescr.toUpperCase()
                      ? -1
                      : 1
                )
                .map(award => (
                  <AwardDetailItem
                    key={award.itemTypeLovdescr}
                    awardName={award.itemTypeLovdescr}
                    statusDescription={award.sfaAwardStatusLovdescr}
                    awardStatus={award.sfaAwardStatus}
                    offeredBalance={award.offerBalance}
                    acceptedBalance={award.acceptBalance}
                    disbursedBalance={award.disbursedBalance}
                  />
                ))}
              {toArray(awardSummary.studentAwardDetail)
                .filter(award => award.sfaAwardStatus === "A")
                .sort(
                  (a, b) =>
                    a.itemTypeLovdescr.toUpperCase() <
                    b.itemTypeLovdescr.toUpperCase()
                      ? -1
                      : 1
                )
                .map(award => (
                  <AwardDetailItem
                    key={award.itemTypeLovdescr}
                    awardName={award.itemTypeLovdescr}
                    statusDescription={award.sfaAwardStatusLovdescr}
                    awardStatus={award.sfaAwardStatus}
                    offeredBalance={award.offerBalance}
                    acceptedBalance={award.acceptBalance}
                    disbursedBalance={award.disbursedBalance}
                  />
                ))}
              {/*toArray(awardSummary.studentAwardDetail).map(award => (
                <AwardDetailItem
                  key={award.itemTypeLovdescr}
                  awardName={award.itemTypeLovdescr}
                  statusDescription={award.sfaAwardStatusLovdescr}
                  awardStatus={award.sfaAwardStatus}
                  offeredBalance={award.offerBalance}
                  acceptedBalance={award.acceptBalance}
                  disbursedBalance={award.disbursedBalance}
                />
              ))*/}
            </List>
            {toArray(lov).some(needButton) && (
              <div style={{ paddingBottom: 20, textAlign: "center" }}>
                <RaisedButton
                  label="Accept / Decline Awards"
                  primary
                  href={this.props.acceptDenyUrl}
                />
              </div>
            )}
          </div>
        );
      }
      // Fault message
      if (!isFetching && data && data.faultMessages) {
        return (
          <div style={{ textAlign: "center" }}>
            <br />
            {this.props.data.faultMessages[0].descr}
            <br />
          </div>
        );
      }
      // Something went wrong.
      return (
        <div style={{ textAlign: "center" }}>
          <br />
          No data found.
          <br />
        </div>
      );
    } catch (error) {
      // Something went real wrong.
      return (
        <div style={{ textAlign: "center" }}>
          <br />
          An error has occurred. If this persists please contact helpdesk.
          <br />
        </div>
      );
    }
  }
}

FinancialAidAwards.propTypes = {
  children: PropTypes.node,
  data: PropTypes.object,
  isFetching: PropTypes.bool,
  acceptDenyUrl: PropTypes.string.isRequired
};
