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, 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, catArr.toString()) prefs.apply() } fun loadContacts(context: Context): List { val json = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) .getString(KEY_CONTACTS, null) ?: return emptyList() return try { 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", arr.toString()).apply() } fun loadBml(context: Context): List { val json = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) .getString("bml_contacts", null) ?: return emptyList() return try { 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 loadCategories(context: Context): List { val json = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE) .getString(KEY_CATEGORIES, null) ?: return emptyList() return try { 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() } } }