package com.miya.fastcashier.utils.manage

import com.fastcashier.lib_common.function.account.AccountService
import com.tencent.mmkv.MMKV
import java.util.*

/**
 * 类描述：本地关键数据MMKV统一管理
 * 概述：涉及到的关键数据：balanceDate(结算时间)
 * 创建人：zpxiang
 * 创建时间：2022/4/24
 * 修改人：
 * 修改时间：
 */
class LocalKeyDataMKManageKit {

    companion object {

        /***************************************** 分账户的关键数据,分区存储ID为MMKV_ID *****************************************/
        private val MMKV_ID = "fastcashier_key_data"
        private val BALANCEDATE_ID = "balanceDate"

        /**
         * 存储结算时间
         */
        fun putBalanceDate(time: Long) {
            getKeyDataMK().putLong(BALANCEDATE_ID, time)
        }

        /**
         * 获取结算时间
         */
        fun getBalanceDate(): Long {
            return getKeyDataMK().getLong(BALANCEDATE_ID, 0)
        }

        /**
         * 结算时间合规化处理，适用于登录时
         * 策略：
         * ①当获取的结算时间=0（证明本地未存储过，第一次登陆）存储为当前时间
         * ②当获取的结算时间小于三天前的当前时间，则将结算时间重置为3天前的时间
         */
        fun handleCompliantBalanceDate() {
            var balanceTime = getBalanceDate()
            if (balanceTime <= 0L) {
                //todo 如果返回有服务器时间建议改成服务器时间
                putBalanceDate(System.currentTimeMillis())
                return
            }

            var minimumTime: Long = System.currentTimeMillis() - 3 * 24 * 3600 * 1000
            if (balanceTime <= minimumTime) {
                putBalanceDate(minimumTime)
            }
        }

        /**
         * 清除关键数据的mmkv存储
         */
        fun clearKeyData() {
            getKeyDataMK().clearAll()
        }

        private fun getKeyDataMK(): MMKV {
            val MMKV_ID_WITH_USER = MMKV_ID.plus("_${AccountService.getUserName()}")
            return MMKV.mmkvWithID(MMKV_ID_WITH_USER)
        }


        /***************************************** 普通存储的关键数据,分区存储ID为默认 *****************************************/
        private val USERNAME_ID = "username"
        private val USERPASSWORD_ID = "password"

        /**
         * 存储登录信息：姓名、密码
         */
        fun putLoginIngfo(userName: String, password: String) {
            MMKV.defaultMMKV().encode(USERNAME_ID, userName)
            MMKV.defaultMMKV().encode(USERPASSWORD_ID, password)
        }

        /**
         * 获取登录姓名
         */
        fun getLoginUserName(): String? {
            return MMKV.defaultMMKV().decodeString(USERNAME_ID)
        }

        /**
         * 获取登录密码
         */
        fun getLoginUserPassword(): String? {
            return MMKV.defaultMMKV().decodeString(USERPASSWORD_ID)
        }

        fun clearCommonData() {
            MMKV.defaultMMKV().clearAll()
        }
    }
}