import React from 'react'
import PropTypes from 'prop-types'
import securityTypes from 'common-fe/constants/security-types'

import BondIssuer from './templates/bond/issuer'
import BondPrice from './templates/bond/price'
import OptionIssuer from './templates/option/issuer'
import OptionPrice from './templates/option/price'
import StockIssuer from './templates/stock/issuer'
import StockPrice from './templates/stock/price'

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

const getSecurityTemplates = (securityType) => {
    switch (securityType) {
        case securityTypes.BOND.value: {
            return {SecurityPrice: BondPrice, SecurityIssuer: BondIssuer}
        }

        case securityTypes.OPTION.value: {
            return {SecurityPrice: OptionPrice, SecurityIssuer: OptionIssuer}
        }

        case securityTypes.EQUITY.value:
        case securityTypes.FUND.value:
        default: {
            return {SecurityPrice: StockPrice, SecurityIssuer: StockIssuer}
        }
    }
}

const OrderSecurityInfo = ({
    className,
    isCollapsed,
    securityType,
    security,
}) => {
    const {SecurityPrice, SecurityIssuer} = getSecurityTemplates(securityType)

    const rootClassNames = bem.classNames(
        'c-order-security-info',
        {isCollapsed},
        className
    )
    return (
        <div className={rootClassNames}>
            <SecurityPrice {...security} />
            <SecurityIssuer {...security} />
        </div>
    )
}

OrderSecurityInfo.propTypes = {
    className: PropTypes.string,
    isCollapsed: PropTypes.bool,
    security: PropTypes.shape({
        askPrice: PropTypes.string, // $345.67'
        bidPrice: PropTypes.string, // '$248.90'
        change: PropTypes.shape({
            value: PropTypes.number, // 4.09
            percentage: PropTypes.numeber, // 2.43
        }),
        currentPriceDisplay: PropTypes.string, // '$123.45'
        exchange: PropTypes.string, // 'NASDAQ'
        lotSize: PropTypes.number, // 100
        industry: PropTypes.string, // 'Technology'
        name: PropTypes.string, // 'Apple Inc.'
        ticker: PropTypes.string, // 'AAPL'
    }),
    securityType: PropTypes.oneOf(Object.keys(securityTypes)),
}

export default OrderSecurityInfo
