package cn.muchinfo.rma.global.data.futureOrders

import cn.muchinfo.rma.global.GlobalDataCollection

data class FutureHoldData(
    var agreeunit: Double = 0.0, // 合约单位
    var buyorsell: Int = 0, // 方向 - 0:买 1:卖
    var curpositionqty: Int = 0, // 持仓（总仓数量, 期末头寸）
    var curtdposition: Int = 0, // 今仓数量（期末今日头寸）
    var curtdpositionenabled: Int = 0, // 今仓可用
    var decimalplace: Int = 0, // 报价小数位
    var enableqty: Int = 0, // 可用（总仓可用）
    var exexchangename: String = "", // 外部交易所名称
    var goodscode: String = "", // 商品代码(内部)
    var goodsid: Int = 0, // 商品ID(自增ID SEQ_GOODS)
    var goodsname: String = "", // 商品名称
    var last: Double = 0.0, // 现价
    var marketid: Int = 0, // 所属市场ID
    var openaverageprice: Double = 0.0, // 开仓均价【头寸变化更新】 = 开仓成本 / 期末头寸 / 合约单位
    var opencost: Double = 0.0, // 开仓成本
    var openpl: Double = 0.0, // 逐笔浮盈【实时行情更新】（MTP：开仓盈亏、平仓盈亏） 买方向 = (最新价 - 开仓均价) * 买期末头寸 * 合约单位；卖方向 = (开仓均价 - 最新价) * 卖期末头寸 * 合约单位
    var outgoodscode: String = "", // 商品代码(外部)
    var positionaverageprice: Double = 0.0, // 持仓均价【头寸变化更新】= 持仓成本 / 期末头寸 / 合约单位
    var positioncost: Double = 0.0, // 持仓成本
    var positionpl: Double = 0.0, // 盯市浮盈【实时行情更新】（MTP：浮动盈亏、持仓盈亏） 买方向 = (最新价 - 持仓均价) * 买期末头寸 * 合约单位；卖方向 = (持仓均价 - 最新价) * 卖期末头寸 * 合约单位
    var positionplrate: Double = 0.0, // 持仓盈亏比例【实时行情更新】 = 持仓盈亏 / 开仓成本
    var usedmargin: Double = 0.0, // 占用保证金
    var selected: Boolean = false
){

    /**
     * 计算盈亏
     */
    fun calculate(){
        val quoteData = GlobalDataCollection.instance?.goodsInfoAndQuotesList?.find { it.outgoodscode == outgoodscode }?.quoteDayData
        if (quoteData != null){
            /** 计算持仓浮动盈亏/盯市浮盈 **/
            if (buyorsell == 0){//买
                positionpl = quoteData.last.minus(positionaverageprice).times(curpositionqty).times(agreeunit)
            }else if (buyorsell == 1){
                positionpl = positionaverageprice.minus(quoteData.last).times(curpositionqty).times(agreeunit)
            }

            /** 逐笔浮盈/平仓浮动盈亏 **/
            if (buyorsell == 0){
                openpl = quoteData.last.minus(openaverageprice).times(curpositionqty).times(agreeunit)
            }else if (buyorsell == 1){
                openpl = openaverageprice.minus(quoteData.last).times(curpositionqty).times(agreeunit)
            }

            positionplrate = positionpl.div(opencost)
        }
    }

}