package com.dmc.callcrm.data import android.content.Context /** Tiny persistent store for the device's registration + sync state. */ class Prefs(ctx: Context) { private val sp = ctx.getSharedPreferences("dmc_call_crm", Context.MODE_PRIVATE) var apiToken: String? get() = sp.getString("api_token", null) set(v) = sp.edit().putString("api_token", v).apply() var employeeId: Long get() = sp.getLong("employee_id", 0L) set(v) = sp.edit().putLong("employee_id", v).apply() var name: String? get() = sp.getString("name", null) set(v) = sp.edit().putString("name", v).apply() var mobile: String? get() = sp.getString("mobile", null) set(v) = sp.edit().putString("mobile", v).apply() var simSlot: Int get() = sp.getInt("sim_slot", -1) set(v) = sp.edit().putInt("sim_slot", v).apply() /** Highest CallLog.DATE we've already uploaded (epoch millis). */ var lastCallDate: Long get() = sp.getLong("last_call_date", 0L) set(v) = sp.edit().putLong("last_call_date", v).apply() /** File.lastModified() of the newest recording we've already processed. */ var lastRecordingScan: Long get() = sp.getLong("last_rec_scan", 0L) set(v) = sp.edit().putLong("last_rec_scan", v).apply() /** Paths already uploaded, to avoid re-sending. */ var uploadedRecordings: MutableSet get() = HashSet(sp.getStringSet("uploaded_recs", emptySet()) ?: emptySet()) set(v) = sp.edit().putStringSet("uploaded_recs", v).apply() fun markUploaded(path: String) { val s = uploadedRecordings s.add(path) // keep the set from growing unbounded val trimmed = if (s.size > 2000) s.toList().takeLast(1500).toMutableSet() else s uploadedRecordings = trimmed } val isRegistered: Boolean get() = !apiToken.isNullOrEmpty() fun bearer(): String = "Bearer ${apiToken.orEmpty()}" }