import React from 'react';
import { numberInMillions } from '../../../../utils/formatters';

class BalanceSheet extends React.Component {

  renderDates(financials) {
    return financials.map((statements, i) => {
      const date = 'As of ' + statements.asOf;
      return <th key={i}>{date}</th>;
    });
  }

  renderField(financials, field) {
    return financials.map((statements, i) => {
      return <td key={i}>{numberInMillions(statements.balanceSheet[field]) || '-'}</td>;
    });
  }

  renderOtherAssets(financials) {
    return financials.map((statements, i) => {
      const other =
      statements.balanceSheet.totalAssets -
      (statements.balanceSheet.cashAndCashEquivalents || 0) -
      (statements.balanceSheet.otherShortTermInvestments || 0) -
      (statements.balanceSheet.receivables || 0) -
      (statements.balanceSheet.inventory || 0) -
      (statements.balanceSheet.otherCurrentAssets || 0) -
      (statements.balanceSheet.netPpe || 0) -
      (statements.balanceSheet.goodwill || 0) -
      (statements.balanceSheet.otherIntangibleAssets || 0);
      return <td key={i}>{numberInMillions(other)}</td>;
    });
  }
  renderOtherLiabilities(financials) {
    return financials.map((statements, i) => {
      const other =
      statements.balanceSheet.totalLiabilities -
      (statements.balanceSheet.accountsPayable || 0) -
      (statements.balanceSheet.currentAccruedExpenses || 0) -
      (statements.balanceSheet.currentDebtAndCapitalLeaseObligation || 0) -
      (statements.balanceSheet.longTermDebtAndCapitalLeaseObligation || 0) -
      (statements.balanceSheet.longTermDebtAndCapitalLeaseObligation || 0);
      return <td key={i}>{numberInMillions(other)}</td>;
    });
  }
  renderOtherEquity(financials) {
    return financials.map((statements, i) => {
      const other =
      statements.balanceSheet.totalEquity -
      (statements.balanceSheet.commonStock || 0) -
      (statements.balanceSheet.retainedEarnings || 0);
      return <td key={i}>{numberInMillions(other)}</td>;
    });
  }

  render() {
    const { financials } = this.props;
    return (
      <table className="FinancialTable">
        <thead>
          <tr>
            <th>In Millions (Except per share Items)</th>
            {this.renderDates(financials)}
          </tr>
        </thead>
        <tbody>
          <tr className="FinancialTable-section">
            <td>Assets</td>
            <td></td>
            <td></td>
            <td></td>
          </tr>
          <tr>
            <td>Cash & Equivalents</td>
            {this.renderField(financials, 'cashAndCashEquivalents')}
          </tr>
          <tr>
            <td>Short Term Investments</td>
            {this.renderField(financials, 'otherShortTermInvestments')}
          </tr>
          <tr>
            <td>Accounts Receivable</td>
            {this.renderField(financials, 'receivables')}
          </tr>
          <tr>
            <td>Inventory</td>
            {this.renderField(financials, 'inventory')}
          </tr>
          <tr>
            <td>Other Current Assets</td>
            {this.renderField(financials, 'otherCurrentAssets')}
          </tr>
          <tr className="FinancialTable-total">
            <td>Total Current Assets</td>
            {this.renderField(financials, 'currentAssets')}
          </tr>
          <tr>
            <td>Property, Plant, and Equipment</td>
            {this.renderField(financials, 'netPpe')}
          </tr>
          <tr>
            <td>LT Investments & Advances</td>
            {this.renderField(financials, 'investmentsAndAdvances')}
          </tr>
          <tr>
            <td>Goodwill</td>
            {this.renderField(financials, 'goodwill')}
          </tr>
          <tr>
            <td>Intangible Assets</td>
            {this.renderField(financials, 'otherIntangibleAssets')}
          </tr>
          <tr className="FinancialTable-total">
            <td>Total Non-Current Assets</td>
            {this.renderField(financials, 'totalNonCurrentAssets')}
          </tr>
          <tr>
            <td>Other Assets</td>
            {this.renderOtherAssets(financials)}
          </tr>
          <tr className="FinancialTable-total">
            <td>Total Assets</td>
            {this.renderField(financials, 'totalAssets')}
          </tr>
          <tr className="FinancialTable-section">
            <td>Liabilities</td>
            <td></td>
            <td></td>
            <td></td>
          </tr>
          <tr>
            <td>Accounts Payable</td>
            {this.renderField(financials, 'accountsPayable')}
          </tr>
          <tr>
            <td>Current Accrued Expenses</td>
            {this.renderField(financials, 'currentAccruedExpenses')}
          </tr>
          <tr>
            <td>Current Portion of LT Debt</td>
            {this.renderField(financials, 'currentDebtAndCapitalLeaseObligation')}
          </tr>
          <tr className="FinancialTable-total">
            <td>Total Current Liabilities</td>
            {this.renderField(financials, 'currentLiabilities')}
          </tr>
          <tr>
            <td>LT Debt and Lease Obligation</td>
            {this.renderField(financials, 'longTermDebtAndCapitalLeaseObligation')}
          </tr>
          <tr>
            <td>Non-Current Deferred Liabilities</td>
            {this.renderField(financials, 'longTermDebtAndCapitalLeaseObligation')}
          </tr>
          <tr>
            <td>Other Liabilities</td>
            {this.renderOtherLiabilities(financials)}
          </tr>
          <tr className="FinancialTable-total">
            <td>Total Non-Current Liabilities</td>
            {this.renderField(financials, 'totalNonCurrentLiabilities')}
          </tr>
          <tr className="FinancialTable-total">
            <td>Total Liabilities</td>
            {this.renderField(financials, 'totalLiabilities')}
          </tr>
          <tr className="FinancialTable-section">
            <td>ShareHolder Equity</td>
            <td></td>
            <td></td>
            <td></td>
          </tr>
          <tr>
            <td>Common Stock</td>
            {this.renderField(financials, 'commonStock')}
          </tr>
          <tr>
            <td>Retained Earnings</td>
            {this.renderField(financials, 'retainedEarnings')}
          </tr>
          <tr>
            <td>Other Shareholder Equity</td>
            {this.renderOtherEquity(financials)}
          </tr>
          <tr className="FinancialTable-total">
            <td>Total Equity</td>
            {this.renderField(financials, 'totalEquity')}
          </tr>
        </tbody>
    </table>
    );
  }
}

BalanceSheet.propTypes = {
  financials: React.PropTypes.array,
};

export default BalanceSheet;
