package com.gamedog.vididin.core.login.login import com.ama.core.architecture.util.AndroidUtil import com.ama.core.architecture.util.DateUtil import com.ama.core.architecture.util.DeviceUtil import com.ama.core.architecture.util.SpUtil import com.ama.core.architecture.util.eventbus.NotifyMan import com.gamedog.vididin.VidiConst import com.gamedog.vididin.VididinEvents import com.gamedog.vididin.beans.Account import com.gamedog.vididin.beans.BankInfo import com.gamedog.vididin.beans.RECORD_CASH_PLUS_GOLD_CONVERT import com.gamedog.vididin.beans.RECORD_GOLD_MINUS_CONVERT_2_CASH import com.gamedog.vididin.beans.RecordCash import com.gamedog.vididin.beans.RecordGold import com.gamedog.vididin.manager.RecordsManager object AccountManager { init { NotifyMan.instance().register(object: NotifyMan.ICallback(true) { override fun onEvent(data: NotifyMan.NotifyData<*>?) { when (data?.mEventType) { VididinEvents.EVENT_AD_WATCHED_FOR_ZEROBUY_EARN_DIAMOND -> { adjustDiamond(VidiConst.DIAMOND_NUM_FOR_ONE_AD) } } } }, VididinEvents.EVENT_AD_WATCHED_FOR_ZEROBUY_EARN_DIAMOND) } private val mAccount: Account by lazy { var account = SpUtil.instance().getObject(SpUtil.KEY_ACCOUNT) if (account == null) { val deviceUUId = DeviceUtil.generateDeviceId() account = Account(accountId = "user_$deviceUUId", deviceUUId=deviceUUId, createdAt = DateUtil.getCurTimeMs()) account.let { SpUtil.instance().putObject(SpUtil.KEY_ACCOUNT, account) } } account } private fun saveAccountInfo() { SpUtil.instance().putObject(SpUtil.KEY_ACCOUNT, mAccount) } //------------------------- 3个数值相关属性 增减 start --------------------------// fun getAccount() : Account { return mAccount } fun getGold(): Long { return mAccount.goldCount } fun adjustGold(adjustNum: Long, recordBean: RecordGold): Boolean { if (adjustNum < 0L && Math.abs(adjustNum) > getGold()) { return false } mAccount.goldCount += adjustNum saveAccountInfo() NotifyMan.instance().sendEvent(VididinEvents.Event_Account_Gold_Changed, null) RecordsManager.instance().appendGoldRecord(recordBean) return true } fun getCash(): Float { return mAccount.cashCount } @Synchronized fun adjustCash(adjustNum: Float, recordBean: RecordCash?): Boolean { if (adjustNum < 0L && Math.abs(adjustNum) > getCash()) { return false } mAccount.cashCount += adjustNum saveAccountInfo() NotifyMan.instance().sendEvent(VididinEvents.Event_Account_Cash_Changed, null) recordBean?.let { RecordsManager.instance().appendCashRecord(recordBean) } return true } fun getDiamond(): Int { return mAccount.diamondCount } @Synchronized fun adjustDiamond(adjustNum: Int): Boolean { if (adjustNum < 0L && Math.abs(adjustNum) > getDiamond()) { return false } mAccount.diamondCount += adjustNum saveAccountInfo() NotifyMan.instance().sendEvent(VididinEvents.Event_Account_Diamond_Changed, null) return true } //------------------------- 3个数值相关属性 增减 End --------------------------// fun getBankInfo(): BankInfo? { return mAccount?.bankInfo } fun hasValidBankInfo(): Boolean { val backInfo = getBankInfo() return !backInfo?.bankName.isNullOrEmpty() && !backInfo.bankAccount.isNullOrEmpty() } fun saveBankAccount(bankAccount: String?) { if (bankAccount.isNullOrEmpty()) { mAccount?.bankInfo = null } else { mAccount?.bankInfo = BankInfo(bankAccount=bankAccount) } saveAccountInfo() NotifyMan.instance().sendEvent( VididinEvents.Event_Account_Bank_Info_Changed, NotifyMan.NotifyData(bankAccount)) } @Synchronized fun convertGold2Cash(): Boolean { try { val couldCovertCashTotal = getGold().div(VidiConst.PER_01CASH_COST_GOLD_NUM) ?: 0 if (couldCovertCashTotal > 0) { val costGoldNum = couldCovertCashTotal * VidiConst.PER_01CASH_COST_GOLD_NUM if (getGold() >= costGoldNum) { adjustGold(-1L * costGoldNum.toInt(), RecordGold(RECORD_GOLD_MINUS_CONVERT_2_CASH, -1L * costGoldNum.toInt())) val adjustCashNum = couldCovertCashTotal * 0.1F adjustCash(adjustCashNum, RecordCash(RECORD_CASH_PLUS_GOLD_CONVERT, adjustCashNum.toDouble(), true)) AndroidUtil.showToast("Has convert $costGoldNum gold to $couldCovertCashTotal cash.") return true } } else { AndroidUtil.showToast("You don't have enough gold.") } } catch (e: Exception) { e.printStackTrace() } return false } fun saveUserIdInfo(userId: Int) { mAccount?.let { it.userId = userId saveAccountInfo() } } fun isBankAccountExist(): Boolean { return !mAccount?.bankInfo?.bankAccount.isNullOrEmpty() } }