import { ryw_Event } from "../../FrameWork/Event/EventEnum";
import EventMgr from "../../FrameWork/Event/EventMgr";
import User from "../../FrameWork/User/User";
import Common5 from "../../Platform/th/Common5";



export default class StockManager{
  
    //每天重新刷新股票的价格数据并写入内存(bForce是否强制刷新)
    public static refreshAllStocksData(day,bForce){
        let stocksConfig = Common5.allStocksConfig
        let curSaveStockDay = User.getCurSaveStockDay()
        if(!bForce){
            //同一天不用重复刷新
            if(curSaveStockDay == day){
                return
            }else{
                User.setCurSaveStockDay(day)
            }
        }
        
        //第一天,将初始价格和涨幅写入内存
        if(day == 1){ 
            let tempTab = {}
            for(var i=0;i<stocksConfig.length;i++){
                let stockName = stocksConfig[i].stockName
                let startPrice = stocksConfig[i].startPrice

                // console.log("股票名称=",stockName)
                tempTab[stockName] = {}
                tempTab[stockName]["stockName"] = stockName
                tempTab[stockName]["curPrice"] = startPrice
                tempTab[stockName]["curRate"] = this.createDropOrGainsRate(day,stocksConfig[i], startPrice)  
                tempTab[stockName]["riskAttributes"] = stocksConfig[i].riskAttributes
                // tempTab[stockName]["stockSum"] = stocksConfig[i].stockSum
            }
            User.setStocksData(tempTab)
        //当天的股价由前一天的股价和当天涨跌幅算出
        }else{  
            let stocksStorageConfig = User.getStocksData()
            let tempTab = {}
            for(var key in stocksStorageConfig){
                let stockName = key
                let lastPrice = stocksStorageConfig[stockName].curPrice
                let singConfig = this.getSingleCompanyConfig(stockName)
                if(!singConfig){
                    continue
                }
                let curRate = this.createDropOrGainsRate(day,singConfig, lastPrice)
                let tempPrice = lastPrice*(1+ Number(curRate)/100)
                let curPrice = Math.floor(tempPrice)
          
                tempTab[stockName] = {}
                tempTab[stockName]["stockName"] = stockName
                tempTab[stockName]["curPrice"] = curPrice
                tempTab[stockName]["curRate"] = curRate
                tempTab[stockName]["riskAttributes"] = singConfig.riskAttributes
                // tempTab[stockName]["stockSum"] = singConfig.stockSum
            }
            User.setStocksData(tempTab)
        } 
        //取出作弊数据后清空
        let tomorrowStockData = User.getTomorrowStockData()
        if(tomorrowStockData && tomorrowStockData.changeDay >0 && day == tomorrowStockData.changeDay){
            User.setTomorrowStockData({})
        }

        EventMgr.emitEvent_custom(ryw_Event.updateStockView);
    }
    //生成涨跌幅比率
    public static createDropOrGainsRate(day,config, curPrice){
        let trueRate = this.getTomorrowGainsRateById(day,config.id)
        if(trueRate != -1){
            console.log("读取了明日股票缓存"+config.stockName+trueRate)
            return trueRate
        }

        let randomRate = 0  
        //随机涨或跌
        let riseval = 50
        if (curPrice > config.startPrice*1.3){
            //涨的概率降低
            riseval -= 30 * ((curPrice- config.startPrice*1.3)/(config.startPrice*2.7))
        }
        else if (curPrice < config.startPrice*0.8){
            if (curPrice <= config.startPrice*0.05){
                riseval = 0
            }
            else{
                //涨的概率提升
                riseval += (50 * ((config.startPrice*0.8-curPrice)/(config.startPrice*0.8))) * 1.2
            }
        }

        let bGains = Common5.getRandomNum(0,100)
        if (bGains <= riseval){
            //涨
            randomRate = Common5.getRandomNum(config.smallestGains*10,config.biggestGains*10)
        }
        else{
            //跌
            randomRate = Common5.getRandomNum(config.smallestDrop*10,config.biggestDrop*10)
        }
        trueRate = (randomRate/10).toFixed(1)
        //console.log("trueRate=",trueRate)
        return trueRate    
    }

    //获取明日涨跌幅比率
    public static getTomorrowGainsRateById(day,id){
        let tomorrowStockData = User.getTomorrowStockData()
        if(tomorrowStockData && tomorrowStockData.changeDay >0 && day == tomorrowStockData.changeDay){
            for(var i=0;i<tomorrowStockData.changeStock.length;i++){
                if(tomorrowStockData.changeStock[i].id == id){
                    return tomorrowStockData.changeStock[i].rate
                }
            }
        }
        return -1
    }

    //获取单个公司config
    public static getSingleCompanyConfig(nameStr){
        let stocksConfig = Common5.allStocksConfig
        for(var i=0;i<stocksConfig.length;i++){
            if(stocksConfig[i].stockName == nameStr){
                return stocksConfig[i]
            }
        }
        let juQingStockConfig = Common5.juQingStocksConfig
        for(var i=0;i<juQingStockConfig.length;i++){
            if(juQingStockConfig[i].stockName == nameStr){
                return juQingStockConfig[i]
            }
        }
    }
    //获取单个公司config
    public static getSingleCompanyConfigById(id){
        let stocksConfig = Common5.allStocksConfig
        for(var i=0;i<stocksConfig.length;i++){
            if(stocksConfig[i].id == id){
                return stocksConfig[i]
            }
        }
        let juQingStockConfig = Common5.juQingStocksConfig
        for(var i=0;i<juQingStockConfig.length;i++){
            if(juQingStockConfig[i].id == id){
                return juQingStockConfig[i]
            }
        }
    }
    //随机产生第二天上涨的股票及涨幅
    public static setTomorrowUpStock(curDay){
        let stocksConfig = Common5.allStocksConfig
        let diFenXianIdConfig = []
        let gaoFenXianIdConfig = []
        for(var i=0;i<stocksConfig.length;i++){
            if(stocksConfig[i].riskAttributes == "高"){
                gaoFenXianIdConfig.push(stocksConfig[i].id)
            }else if(stocksConfig[i].riskAttributes == "低"){
                diFenXianIdConfig.push(stocksConfig[i].id)
            }
        }
        let selectGaoIndexIdArr = Common5.getNumberFromArray(0,gaoFenXianIdConfig.length,2)
        let selectDiIndexIdArr = Common5.getNumberFromArray(0,diFenXianIdConfig.length,2)
        //全部放入一个表中
        let tempAllInfo = []
        for(var i=0;i<selectGaoIndexIdArr.length;i++){
            tempAllInfo.push(gaoFenXianIdConfig[selectGaoIndexIdArr[i]])
        }
        for(var i=0;i<selectDiIndexIdArr.length;i++){
            tempAllInfo.push(diFenXianIdConfig[selectDiIndexIdArr[i]])
        }
        console.log("tempAllInfo==",tempAllInfo)
        let saveInfo = {
            changeDay:curDay+1,
            changeStock:[]
        }
        let stockNameArrGao = ""
        let stockNameArrDi = ""
        for(var i=0;i<tempAllInfo.length;i++){
            let singleConfig = this.getSingleCompanyConfigById(tempAllInfo[i])
            let randomRate = Common5.getRandomNum(singleConfig.smallestGains*10,singleConfig.biggestGains*10)
            let trueRate = (randomRate/10).toFixed(1)
            saveInfo.changeStock.push({id:tempAllInfo[i],rate:trueRate})
            if(singleConfig.riskAttributes == "高"){
                stockNameArrGao += `【${singleConfig.stockName}】`
            }else{
                stockNameArrDi += `【${singleConfig.stockName}】`
            }
            
        }
        User.setTomorrowStockData(saveInfo)
        console.log("明天会涨的股票包括==",stockNameArrGao,stockNameArrDi,saveInfo)
        return {stockNameArrGao:stockNameArrGao,stockNameArrDi:stockNameArrDi}
    }
    //增加剧情股票(写入缓存)
    public static addJuQingStock(){
        let juQingStockConfig = Common5.juQingStocksConfig
        //已有缓存
        let stocksStorageConfig = User.getStocksData()

        for(var i=0;i<juQingStockConfig.length;i++){
            let stockName = juQingStockConfig[i].stockName
            let startPrice = juQingStockConfig[i].startPrice

            let temp = {}
            temp[stockName] = {}
            temp[stockName]["stockName"] = stockName
            temp[stockName]["curPrice"] = startPrice
            temp[stockName]["curRate"] = this.createDropOrGainsRate(1,juQingStockConfig[i], startPrice)  
            temp[stockName]["riskAttributes"] = juQingStockConfig[i].riskAttributes

            //将新增对象插入第一个(深拷贝)
            stocksStorageConfig = {...temp,...stocksStorageConfig};
        }
        User.setStocksData(stocksStorageConfig)
    }
    //获得剧情股票当前数据
    public static getJuQingStockData(stockName){
        let singConfig = this.getSingleCompanyConfig(stockName)
        let stocksStorageConfig = User.getStocksData()

        for(var key in stocksStorageConfig){
            if(key == stockName){
                let marketValue = singConfig.stockSum *  stocksStorageConfig[key].curPrice
                console.log("需要获取的股票信息==",stockName,marketValue)
                return {stockName:stockName,marketValue:marketValue}
            }
        }
    }
}