import User from "../../FrameWork/User/User";
import Common5 from "../../Platform/th/Common5";
import DustbinManager from "./DustbinManager";

import ProbabilityManager from "./ProbabilityManager";
import ShouLieManager from "./ShouLieManager";

import TaoFenManager from "./TaoFenManager";
import PrefabManage, { GameType } from "../PrefabManager/PrefabManage";
import BagManager, { BagGoodsConfig, GoodsLocalProperty } from "./BagManager";
import DiaoYuConfigManage from "../diaoyu/DiaoYuConfigManage";

import TaskManager, { MainTaskIdEnum } from "../JuQingChat/TaskManager";
import GMManager from "./GMManager";
import AppPlatform from "../../FrameWork/Util/AppPlatform";
import CommonDefine from "../../Platform/th/CommonDefine";
import UserManager from "./UserManager";


import QinWangLingManager from "./QinWangLingManager";


import TanWeiManager from "./TanWeiManager";
import ShipuManager from "./ShipuManager";
import MiShuManager from "./MiShuManager";
import ChaChangManager from "./ChaChangManager";
import XiuXianNongZhuangManager from "./XiuXianNongZhuangManager";
import BaiCaoJiManager from "./BaiCaoJiManager";
import BuyShopManager from "./BuyShopManager";
import ZaoCanManager from "./ZaoCanManager";


export default class InterfaceManager {
    static isChange504 = false;
    public static initManager() {
        TanWeiManager.initManager()
        ShipuManager.initManager()
        MiShuManager.initManager()
        ZaoCanManager.initManager()


        InterfaceManager.loadAllJson()
    }


    public static loadAllJson() {
        let DiaoYuConfigCallFunc = (callFunc) => {
            DiaoYuConfigManage.loadAllJson(callFunc);
        }

        let DustbinConfigCallFunc = (callFunc) => {
            DustbinManager.initManager(callFunc)
        }


        let ShouLieConfigCallFunc = (callFunc) => {
            ShouLieManager.initManager(callFunc)
        }
        let TaoFenConfigCallFunc = (callFunc) => {
            TaoFenManager.initManager(callFunc)
        }

        let QinWangLingConfigCallFunc = (callFunc) => {
            QinWangLingManager.initManager(callFunc)
        }

        let ChaChangConfigCallFunc = (callFunc) => {
            ChaChangManager.initManager(callFunc)
        }

        let XiuXianNongChangConfigCallFunc = (callFunc) => {
            XiuXianNongZhuangManager.initManager(callFunc)
        }

        let baicaijiConfigCallFunc = (callFunc) => {
            BaiCaoJiManager.initManager(callFunc)
        }

        let BuyShopConfigCallFunc = (callFunc) => {
            BuyShopManager.initManager(callFunc)
        }


        //这里用递归的方式加载json,处理同时加载多个json情况
        let loadJsonArr = [
            DiaoYuConfigCallFunc, DustbinConfigCallFunc, ShouLieConfigCallFunc, TaoFenConfigCallFunc, QinWangLingConfigCallFunc, ChaChangConfigCallFunc, XiuXianNongChangConfigCallFunc,
            baicaijiConfigCallFunc,BuyShopConfigCallFunc
        ]

        let loadIndex = 0
        let loadCallFunc = (index) => {
            if (index >= loadJsonArr.length) {
                return
            }

            console.log('mainScene页loadAllJson_', index)
            let callFunc = () => {
                console.log('mainScene页单个json加载完毕,加载下一个')
                loadCallFunc(++loadIndex)
            }
            loadJsonArr[index](callFunc)
        }
        loadCallFunc(loadIndex)
    }


    public static getAllEarnMoneyInterface() {
        return 100
    }



    public static getHaveKaiye(gameType) {

        let list = User.getCanInterGameList()
        for (let i = 0; i < list.length; i++) {
            if (gameType == list[i]) {
                return true
            }
        }

        let Gm = GMManager.getToggleStatus_AllGameOpen()
        if (Gm) {
            return true
        }

        let num = UserManager.getDisTaskNumByGameType(gameType)
        if (num < 0) {
            return true
        }
        return false
    }

    // public static canInterGameList = []
    public static getDaoyeTaskList() {
        //任务倒爷
        let subTaskInfo: any = TaskManager.getCurUnLockSubTaskInfo()
        let mainTaskInfo: any = TaskManager.getCurUnLockMainTaskInfo()
        let mainId = mainTaskInfo.Id
        let daohuoList = []
        console.log(subTaskInfo.Id, 'subTaskInfo.Id ++++====')

        return daohuoList
    }

    public static setDaoyeList(gameType) {
        User.setDaoyeListName(gameType)
        let daohuoList = []

        for (let i = 0; i < BagGoodsConfig.length; i++) {
            if (gameType == BagGoodsConfig[i].gameType) {
                let obj = {
                    goodId: BagGoodsConfig[i].goodId,
                    buyNum: BagGoodsConfig[i].buyNum,
                    buyPercent: 10,
                    gameType: BagGoodsConfig[i].gameType
                }
                daohuoList.push(obj)
            }
        }
        User.setDaoyeGoodList(daohuoList)
    }
    public static getDaoyeList() {
        return User.getDaoyeGoodList()
    }



    public static getGoodInGameE(goodsId) {
        if (goodsId >= 1000 && goodsId <= 1099) {
            return 'NiFengKuaidi'
        } else if (goodsId >= 1200 && goodsId <= 1299) {
            return 'ShouLie'
        } else if (goodsId >= 1300 && goodsId <= 1399) {
            return 'Diaoyu'
        } else if (goodsId >= 1400 && goodsId <= 1499) {
            return 'XiaoMaibu'
        } else if (goodsId >= 1500 && goodsId <= 1599) {
            return 'IceWorld'
        } else if (goodsId >= 1100 && goodsId <= 1199) {
            return 'Dustbin'
        } else if (goodsId >= 1600 && goodsId <= 1699) {
            return 'TaoFen'
        } else if (goodsId == 1711) {
            return 'Diaoyu'
        }
    }

    public static DiTanSaleGoods(price) {
        //let num = 1
        User.setDitanSaleGoodsIndex(price)

    }

    public static changeList(gameType, goodArray, isCanchangeList, isAD) {
        // let config = BagManager.getJuQingGoodConfig()

        //保底生效,出GM物品
        if (isCanchangeList) {
            let goodIdTemp = 0
            let gameTypeCompare = '-999'

            let mainTaskInfo: any = TaskManager.getCurUnLockMainTaskInfo()
            let mainId = mainTaskInfo.Id
            let configData = null

            //优先任务Gm
            let isHaveTaskGm = false
            if (mainId != MainTaskIdEnum.MainTask_None && mainId) {
                configData = TaskManager.getTaskConfigById(mainId)
                //console.log(configData, 'config++++++++++++==')
                if (configData.GMGoodIdArray && (configData.GMGameType == gameType)) {
                    isHaveTaskGm = true
                    // goodIdTemp = configData.GMGoodIdArray[0]
                    for (let i = 0; i < configData.GMGoodIdArray.length; i++) {
                        let goodId = configData.GMGoodIdArray[i]
                        if (BagManager.getBagGoodNums(goodId) <= 0) {
                            goodIdTemp = goodId
                            break
                        }
                    }
                    //goodIdTemp = configData.GMGoodIdArray[0]
                    gameTypeCompare = configData.GMGameType
                }
            }
            if (!isHaveTaskGm) {
                let daoYeList = InterfaceManager.getDaoyeList()
                if (daoYeList.length > 0) {
                    // goodIdTemp = daoYeList[0].goodId
                    let config = BagManager.getJuQingGoodConfig(daoYeList[0].goodId)
                    gameTypeCompare = config.GMGameType
                    for (let i = 0; i < daoYeList.length; i++) {
                        let goodId = daoYeList[i].goodId
                        if (BagManager.getBagGoodNums(goodId) <= 0) {
                            goodIdTemp = goodId
                            break
                        }
                    }
                }
            }
            console.log(goodIdTemp, gameTypeCompare, 'gameTypeCompare+++++++++++=====')
            if (gameTypeCompare == gameType) {
                console.log('正是这个玩法')


                let goodId = goodIdTemp
                let goodsNum = BagManager.getBagGoodNums(goodId)
                if (goodsNum <= 0) {

                    let isHave = false
                    for (let i = 0; i < goodArray.length; i++) {
                        if (goodArray[i].goodId == goodIdTemp || goodIdTemp == 0) {
                            isHave = true
                            break
                        }
                    }

                    if (isHave) {
                        console.log('列表有任务物品不需要变换')
                        return goodArray
                    } else {
                        //商人收购单某些物品不能免费刷出,只能广告刷出

                        let juQingGoodConfig = BagManager.getJuQingGoodConfig(goodId)
                        let isCanOut = true
                        if (!isAD) {
                            if (juQingGoodConfig && !juQingGoodConfig.isCanFreeOut) {
                                isCanOut = false
                            }
                        }
                        if (isCanOut) {
                            for (let i = 0; i < goodArray.length; i++) {
                                goodArray[i].goodId = goodId
                                break
                            }
                        }
                        console.log('商人收购单某些物品不能免费刷出,只能广告刷出', goodId, isCanOut)
                        console.log('背包没有任务物品,变换完成')
                        return goodArray
                    }

                } else {
                    console.log('背包有任务物品不需要变换')
                    return goodArray
                }

            } else if (gameTypeCompare == '-999') {
                console.log('不是这个玩法')
                let daoyeGoodList = User.getDaoyeGoodList()
                //判断倒爷的道具是这个玩法的并且数量不足的情况
                //console.log(daoyeGoodList, 'daoyeGoodList+++判断倒爷的道具是这个玩法的并且数量不足的情况++++++++=====')
                let daoyeJiaohuo = User.getDaoyeJiaoHuo()
                if (daoyeJiaohuo) {
                    //
                    console.log(goodArray, '倒爷已经提交货单了')
                    return goodArray
                } else {
                    let tempList = []
                    for (let i = 0; i < daoyeGoodList.length; i++) {
                        let gameTypeGet = this.getGoodInGameE(daoyeGoodList[i].goodId)
                        if (gameTypeGet == gameType) {
                            tempList[tempList.length] = BagManager.getGoodsProperty(daoyeGoodList[i].goodId)
                        }
                    }
                    if (tempList.length == 0) {
                        //console.log(goodArray,'提货单没有这个玩法的道具')
                        return goodArray
                    } else {

                        let goodIdTemp = 0
                        for (let i = 0; i < tempList.length; i++) {
                            let buyNum = tempList[i].buyNum || 0
                            let haveNum = BagManager.getBagGoodNums(tempList[i].goodId)
                            if (haveNum < buyNum) {
                                goodIdTemp = tempList[i].goodId
                                break
                            }
                        }
                        console.log(goodIdTemp, '替换这个道具')
                        // 开始改变list
                        let isHave = false
                        for (let i = 0; i < goodArray.length; i++) {
                            if (goodArray[i].goodId == goodIdTemp || goodIdTemp == 0) {
                                isHave = true
                                break
                            }
                        }

                        if (isHave) {
                            console.log(goodIdTemp, '正准备给了这个道具')
                            return goodArray
                        } else {
                            if (goodIdTemp == 0) {
                                console.log(goodArray, '没有匹配的goodId')
                                return goodArray
                            } else {
                                for (let i = 0; i < goodArray.length; i++) {
                                    goodArray[i].goodId = goodIdTemp
                                    break
                                }

                                console.log(goodIdTemp, '切换道具')
                                return goodArray
                            }

                        }

                    }
                }
            } else {
                //
                console.log('不需要变换')
                return goodArray
            }

        } else {
            return goodArray
        }
    }

    public static getMangheGoodsListByType(gameType, goodsNum = 1, isAD = false, probabilityType = 'common') {
        //根据游戏类型和是否广告获取配置的概率
        let pro = ProbabilityManager.getMangHeProbability(gameType, goodsNum, isAD, probabilityType)
        console.log(pro, 'pro+++++++++===')
        let mainTaskInfo: any = TaskManager.getCurUnLockMainTaskInfo()
        let mainId = mainTaskInfo.Id
        console.log('getMangheGoodsListByType==', gameType, goodsNum, isAD, probabilityType)
        //根据保底逻辑判断是否GM保底生效
        let isCanchangeList = ProbabilityManager.getCanChangeList(gameType)
        if (gameType == 'Dustbin') {
            let goodArray = []
            let list_ = DustbinManager.getCurGoodList()
            for (let i = 0; i < goodsNum; i++) {
                let index_ = Common5.getProbabilityResultIndex(pro)
                console.log(index_, 'goodIndex+++++++')
                let goods = list_[index_]
                let data_ = { goodId: 0, goodNum: 1, goodIndex: 0 }
                data_.goodId = goods.goodId
                data_.goodIndex = index_


                let isHaveData = false
                for (let value of goodArray) {
                    if (value.goodId == data_.goodId && value.goodIndex == data_.goodIndex) {
                        isHaveData = true
                        value.goodNum++
                        break
                    }
                }

                if (!isHaveData) {
                    goodArray.push(data_)
                }
            }

            // console.log(goodArray, 'goodArray111++')

            let goodArrayNew = this.changeList(gameType, goodArray, isCanchangeList, isAD)
            return goodArrayNew

        } else if (gameType == 'Diaoyu') {
            let goodArray = []
            let list_ = DiaoYuConfigManage.getCurGoodList()
            for (let i = 0; i < goodsNum; i++) {
                let index_ = Common5.getProbabilityResultIndex(pro)
                console.log(index_, 'goodIndex+++++++')
                let goods = list_[index_]
                let data_ = { goodId: 0, goodNum: 1, goodIndex: 0 }
                data_.goodId = goods.goodId
                data_.goodIndex = index_
                let isHaveData = false

                // if(mainId == MainTaskIdEnum.MainTask_506){
                //     let tempId = 1706
                //     if(BagManager.getBagGoodNums(tempId) <= 0){
                //         data_.goodId = tempId
                //     }
                // }

                for (let value of goodArray) {
                    if (value.goodId == data_.goodId && value.goodIndex == data_.goodIndex) {
                        isHaveData = true
                        value.goodNum++
                        break
                    }
                }

                if (!isHaveData) {
                    goodArray.push(data_)
                }
            }

            // console.log(goodArray, 'goodArray111++')

            let goodArrayNew = this.changeList(gameType, goodArray, isCanchangeList, isAD)
            return goodArrayNew

        } else if (gameType == 'IceWorld') {

        } else if (gameType == 'NiFengKuaidi') {

        } else if (gameType == 'ShouLie') {
            let goodArray = []
            let list_ = ShouLieManager.getCurGoodList()
            //console.log('狩猎list=====',list_)
            //console.log(list_, 'list_+++++++++++++++==')
            for (let i = 0; i < goodsNum; i++) {
                let index_ = Common5.getProbabilityResultIndex(pro)
                let goods = list_[index_]
                console.log(index_, 'index_+++++++')
                let data_ = { goodId: 0, goodNum: 1, goodIndex: 0 }
                data_.goodId = goods.goodId
                data_.goodIndex = index_

                let isHaveData = false
                for (let value of goodArray) {
                    if (value.goodId == data_.goodId && value.goodIndex == data_.goodIndex) {
                        isHaveData = true
                        value.goodNum++
                        break
                    }
                }
                if (!isHaveData) {
                    goodArray.push(data_)
                }
            }
            let goodArrayNew = this.changeList(gameType, goodArray, isCanchangeList, isAD)
            return goodArrayNew
        } else if (gameType == 'TaoFen') {
            let goodArray = []
            let list_ = TaoFenManager.getCurGoodList()
            for (let i = 0; i < goodsNum; i++) {
                let index_ = Common5.getProbabilityResultIndex(pro)
                let goods = list_[index_]
                console.log(index_, 'index_+++++++')
                let data_ = { goodId: 0, goodNum: 1, goodIndex: 0 }
                data_.goodId = goods.goodId
                data_.goodIndex = index_
                let isHaveData = false
                for (let value of goodArray) {
                    if (value.goodId == data_.goodId && value.goodIndex == data_.goodIndex) {
                        isHaveData = true
                        value.goodNum++
                        break
                    }
                }
                if (!isHaveData) {
                    goodArray.push(data_)
                }
            }
            let goodArrayNew = this.changeList(gameType, goodArray, isCanchangeList, isAD)
            return goodArrayNew

        } else if (gameType == 'MoTuoChe') {

        } else if (gameType == 'ChaoFanLin') {
            let goodArray = []
            let list_ = QinWangLingManager.getCurGoodList()

            for (let i = 0; i < goodsNum; i++) {
                let index_ = Common5.getProbabilityResultIndex(pro)
                let goods = list_[index_]
                console.log(index_, 'index_+++++++')
                let data_ = { goodId: 0, goodNum: 1, goodIndex: 0 }
                data_.goodId = goods.goodId
                data_.goodIndex = index_

                let isHaveData = false
                for (let value of goodArray) {
                    if (value.goodId == data_.goodId && value.goodIndex == data_.goodIndex) {
                        isHaveData = true
                        value.goodNum++
                        break
                    }
                }
                if (!isHaveData) {
                    goodArray.push(data_)
                }
            }
            let goodArrayNew = this.changeList(gameType, goodArray, isCanchangeList, isAD)
            return goodArrayNew
        } else if (gameType == 'ChaChang') {
            let list_ = ChaChangManager.getCurGoodList()
            let goodArray = []
            let goodIndex = []
            while (goodArray.length < goodsNum) {
                let index_ = Common5.getProbabilityResultIndex(pro)
                let goods = list_[index_]
                if (goodIndex.indexOf(index_) >= 0) {

                } else {
                    goodIndex[goodIndex.length] = index_
                    let objData = {
                        goodId: goods.goodId,
                        goodNum: 1
                    }
                    goodArray[goodArray.length] = objData
                }
            }
            console.log(goodArray, '茶场goodArray++++=====')

            let goodArrayNew = this.changeList(gameType, goodArray, isCanchangeList, isAD)
            return goodArrayNew
        } else if (gameType == 'XiuXianNongZhuang') {
            let list_ = XiuXianNongZhuangManager.getCurGoodList()
            let goodArray = []
            let goodIndex = []
            while (goodArray.length < goodsNum) {
                let index_ = Common5.getProbabilityResultIndex(pro)
                let goods = list_[index_]
                if (goodIndex.indexOf(index_) >= 0) {

                } else {
                    goodIndex[goodIndex.length] = index_
                    let objData = {
                        goodId: goods.goodId,
                        goodNum: 1
                    }
                    goodArray[goodArray.length] = objData
                }
            }
            console.log(goodArray, '休闲农庄goodArray++++=====')

            let goodArrayNew = this.changeList(gameType, goodArray, isCanchangeList, isAD)
            return goodArrayNew
        } else if (gameType == 'BaiCaoJi') {
            let list_ = BaiCaoJiManager.getCurGoodList()
            let goodArray = []
            let goodIndex = []
            while (goodArray.length < goodsNum) {
                let index_ = Common5.getProbabilityResultIndex(pro)
                let goods = list_[index_]
                if (goodIndex.indexOf(index_) >= 0) {

                } else {
                    goodIndex[goodIndex.length] = index_
                    let objData = {
                        goodId: goods.goodId,
                        goodNum: 1
                    }
                    goodArray[goodArray.length] = objData
                }
            }
            console.log(goodArray, '佰草集goodArray++++=====')

            let goodArrayNew = this.changeList(gameType, goodArray, isCanchangeList, isAD)
            return goodArrayNew
        } else if (gameType == 'GuShu') {
            let list_ = BaiCaoJiManager.getGuShuCurGoodList()
            let goodArray = []
            let goodIndex = []
            while (goodArray.length < goodsNum) {
                let index_ = Common5.getProbabilityResultIndex(pro)
                let goods = list_[index_]
                if (goodIndex.indexOf(index_) >= 0) {

                } else {
                    goodIndex[goodIndex.length] = index_
                    let objData = {
                        goodId: goods.goodId,
                        goodNum: 1
                    }
                    goodArray[goodArray.length] = objData
                }
            }
            console.log(goodArray, '古树goodArray++++=====')

            let goodArrayNew = this.changeList(gameType, goodArray, isCanchangeList, isAD)
            return goodArrayNew
        } else if (gameType == 'BaiCaoJi') {

        } else if (gameType == 'GuShu') {

        } else if (gameType == 'ShouHuoJi') {
            let list_ = BuyShopManager.getCurGoodList()
            let goodArray = []
            let goodIndex = []
            while (goodArray.length < goodsNum) {
                let index_ = Common5.getProbabilityResultIndex(pro)
                let goods = list_[index_]
                console.log('sy123==list_=', list_, index_, goods)
                if (goodIndex.indexOf(index_) >= 0) {

                } else {
                    goodIndex[goodIndex.length] = index_
                    let objData = {
                        "saveNum": 15,
                        "buyNum": 14,
                        "goodId": 1401,
                        "descStr": "鸡蛋",
                        "goodName": "鸡蛋",
                        "priceNum": 2
                    }
                    objData.saveNum = goods.saveNum
                    objData.buyNum = goods.buyNum
                    objData.goodId = goods.goodId
                    objData.descStr = goods.descStr
                    objData.goodName = goods.goodName
                    objData.priceNum = goods.priceNum
                    goodArray[goodArray.length] = objData
                }
            }
            console.log(goodArray, '售货机goodArray++++=====')

            // let goodArrayNew = this.changeList(gameType, goodArray, isCanchangeList, isAD)
            // goodArrayNew.sort(function () {
            //     return 0.5 - Math.random()
            // })
            return goodArray //goodArrayNew
        }


    }








    // public static saveData(isShow=false){
    //     if(!AppPlatform.is_TT_GAME_custom()){
    //         if(Common5.saveTime == 0){
    //             Common5.saveTime = 30
    //             console.log('保存数据')
    //             let sendData = UserManager.sendDataToUrl()
    //             if(isShow){
    //                 PrefabManage.showTextTips('保存数据成功')
    //             }

    //         }else{
    //             console.log('保存数据过于频繁请稍后再试')

    //             if(isShow){
    //                 PrefabManage.showTextTips('保存数据过于频繁')
    //             }
    //         }
    //     }else{

    //         if(Common5.saveTime == 0){
    //             let sendData = UserManager.sendDataToUrl()
    //             Common5.saveTime = 30
    //             CommonDefine.setServerData(sendData, ()=>{

    //                 console.log('保存数据成功')
    //                 if(isShow){
    //                     PrefabManage.showTextTips('保存数据成功')
    //                 }

    //             }, ()=>{
    //                 console.log('保存数据失败')
    //             })
    //         }else{
    //             //PrefabManage.showTextTips('保存数据过于频繁请稍后再试')
    //             console.log('保存数据过于频繁')
    //         }

    //     }
    // }


    public static taskTipBox(goodArray, taskDesc, success?, cancle?) {
        let isHave = BagManager.isHaveAllGood(goodArray)
        if (isHave) {
            setTimeout(() => {
                PrefabManage.loadPrefabByType(GameType.BoxTanChuang, null, (prefab) => {
                    prefab.getComponent('BoxTanChuang').setViewData(2, taskDesc, () => {
                        success()
                    })
                    prefab.getComponent('BoxTanChuang').setTitle(2)
                })
            }, 500);

        }
    }

    public static taskTipBox2(taskDesc, success?, cancle?) {
        let isHave = true
        if (isHave) {
            setTimeout(() => {
                PrefabManage.loadPrefabByType(GameType.BoxTanChuang, null, (prefab) => {
                    prefab.getComponent('BoxTanChuang').setViewData(2, taskDesc, () => {
                        success()
                    })
                    prefab.getComponent('BoxTanChuang').setTitle(2)
                })
            }, 500);

        }
    }

    public static getFixGoodListByIndex() {
        let goodList = BuyShopManager.getCurGoodList()
        return goodList
    }

}