package sh.sar.basedbank.util import android.content.Context import org.json.JSONArray import org.json.JSONObject import sh.sar.basedbank.api.mib.MibBeneficiary import sh.sar.basedbank.api.mib.MibBeneficiaryCategory object ContactsCache { private const val PREFS = "contacts_cache" private const val KEY_CONTACTS = "mib_contacts" private const val KEY_CATEGORIES = "mib_categories" fun save( context: Context, contacts: List, categories: List ) { val prefs = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() val contactsArr = JSONArray() for (c in contacts) { contactsArr.put(JSONObject().apply { put("benefNo", c.benefNo) put("benefName", c.benefName) put("benefNickName", c.benefNickName) put("benefAccount", c.benefAccount) put("benefType", c.benefType) put("bankColor", c.bankColor) put("benefBankName", c.benefBankName) put("bankCode", c.bankCode) put("benefStatus", c.benefStatus) put("transferCyDesc", c.transferCyDesc) put("customerImgHash", c.customerImgHash ?: "") put("benefCategoryId", c.benefCategoryId) put("profileId", c.profileId) }) } prefs.putString(KEY_CONTACTS, CacheEncryption.encrypt(contactsArr.toString())) val catArr = JSONArray() for (cat in categories) { catArr.put(JSONObject().apply { put("id", cat.id) put("categoryName", cat.categoryName) put("numBenef", cat.numBenef) }) } prefs.putString(KEY_CATEGORIES, CacheEncryption.encrypt(catArr.toString())) prefs.apply() } fun clear(context: Context) { context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit().clear().apply() } fun loadContacts(context: Context): List { val raw = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) .getString(KEY_CONTACTS, null) ?: return emptyList() return try { val json = CacheEncryption.decrypt(raw) val arr = JSONArray(json) (0 until arr.length()).map { i -> val o = arr.getJSONObject(i) MibBeneficiary( benefNo = o.optString("benefNo"), benefName = o.optString("benefName"), benefNickName = o.optString("benefNickName"), benefAccount = o.optString("benefAccount"), benefType = o.optString("benefType"), bankColor = o.optString("bankColor", "#888888"), benefBankName = o.optString("benefBankName"), bankCode = o.optString("bankCode"), benefStatus = o.optString("benefStatus"), transferCyDesc = o.optString("transferCyDesc", "MVR"), customerImgHash = o.optString("customerImgHash").takeIf { it.isNotBlank() }, benefCategoryId = o.optString("benefCategoryId", "0"), profileId = o.optString("profileId", "") ) } } catch (e: Exception) { emptyList() } } fun saveBml(context: Context, contacts: List) { val arr = JSONArray() for (c in contacts) { arr.put(JSONObject().apply { put("benefNo", c.benefNo) put("benefName", c.benefName) put("benefNickName", c.benefNickName) put("benefAccount", c.benefAccount) put("benefType", c.benefType) put("bankColor", c.bankColor) put("benefBankName", c.benefBankName) put("bankCode", c.bankCode) put("benefStatus", c.benefStatus) put("transferCyDesc", c.transferCyDesc) put("benefCategoryId", c.benefCategoryId) }) } context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) .edit().putString("bml_contacts", CacheEncryption.encrypt(arr.toString())).apply() } fun loadBml(context: Context): List { val raw = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) .getString("bml_contacts", null) ?: return emptyList() return try { val json = CacheEncryption.decrypt(raw) val arr = JSONArray(json) (0 until arr.length()).map { i -> val o = arr.getJSONObject(i) MibBeneficiary( benefNo = o.optString("benefNo"), benefName = o.optString("benefName"), benefNickName = o.optString("benefNickName"), benefAccount = o.optString("benefAccount"), benefType = o.optString("benefType"), bankColor = o.optString("bankColor", "#0066A1"), benefBankName = o.optString("benefBankName"), bankCode = o.optString("bankCode"), benefStatus = o.optString("benefStatus"), transferCyDesc = o.optString("transferCyDesc", "MVR"), customerImgHash = null, benefCategoryId = o.optString("benefCategoryId", "BML") ) } } catch (e: Exception) { emptyList() } } fun saveFahipay(context: Context, contacts: List, categories: List) { val prefs = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit() val arr = JSONArray() for (c in contacts) arr.put(JSONObject().apply { put("benefNo", c.benefNo) put("benefNickName", c.benefNickName) put("benefAccount", c.benefAccount) put("bankColor", c.bankColor) put("benefBankName", c.benefBankName) put("benefCategoryId", c.benefCategoryId) }) prefs.putString("fahipay_contacts", CacheEncryption.encrypt(arr.toString())) val catArr = JSONArray() for (cat in categories) catArr.put(JSONObject().apply { put("id", cat.id) put("categoryName", cat.categoryName) put("numBenef", cat.numBenef) }) prefs.putString("fahipay_categories", CacheEncryption.encrypt(catArr.toString())) prefs.apply() } fun loadFahipay(context: Context): List { val raw = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) .getString("fahipay_contacts", null) ?: return emptyList() return try { val arr = JSONArray(CacheEncryption.decrypt(raw)) (0 until arr.length()).map { i -> val o = arr.getJSONObject(i) MibBeneficiary( benefNo = o.optString("benefNo"), benefName = "", benefNickName = o.optString("benefNickName"), benefAccount = o.optString("benefAccount"), benefType = "FAHIPAY", bankColor = o.optString("bankColor", "#FF6B00"), benefBankName = o.optString("benefBankName"), bankCode = "", benefStatus = "", transferCyDesc = "", customerImgHash = null, benefCategoryId = o.optString("benefCategoryId"), profileId = "" ) } } catch (_: Exception) { emptyList() } } fun loadFahipayCategories(context: Context): List { val raw = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) .getString("fahipay_categories", null) ?: return emptyList() return try { val arr = JSONArray(CacheEncryption.decrypt(raw)) (0 until arr.length()).map { i -> val o = arr.getJSONObject(i) MibBeneficiaryCategory(o.optString("id"), o.optString("categoryName"), o.optInt("numBenef")) } } catch (_: Exception) { emptyList() } } fun loadCategories(context: Context): List { val raw = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) .getString(KEY_CATEGORIES, null) ?: return emptyList() return try { val json = CacheEncryption.decrypt(raw) val arr = JSONArray(json) (0 until arr.length()).map { i -> val o = arr.getJSONObject(i) MibBeneficiaryCategory( id = o.optString("id"), categoryName = o.optString("categoryName"), numBenef = o.optInt("numBenef", 0) ) } } catch (e: Exception) { emptyList() } } }