package com.jttools.datacontrol.remote import org.json.JSONObject /** Identifiants d'un projet Firebase (ceux du bloc `firebaseConfig` de la console). */ data class FirebaseConfig(val apiKey: String, val appId: String, val projectId: String) { companion object { /** * Lit ce que l'utilisateur colle : le bloc `firebaseConfig` de la console (JavaScript), un JSON, * ou une chaîne « fc1:… » partagée par FamilyControl. Renvoie null si apiKey, appId ou projectId manque. */ fun parse(input: String): FirebaseConfig? { val text = input.trim() if (text.startsWith("fc1:")) { return runCatching { val json = JSONObject(String(java.util.Base64.getMimeDecoder().decode(text.removePrefix("fc1:")), Charsets.UTF_8)) build(json.optString("apiKey"), json.optString("appId"), json.optString("projectId")) }.getOrNull() } fun pick(name: String) = Regex("""["']?$name["']?\s*[:=]\s*["']([^"']+)["']""").find(text)?.groupValues?.get(1) return build(pick("apiKey"), pick("appId"), pick("projectId")) } private fun build(apiKey: String?, appId: String?, projectId: String?): FirebaseConfig? = if (apiKey.isNullOrBlank() || appId.isNullOrBlank() || projectId.isNullOrBlank()) null else FirebaseConfig(apiKey.trim(), appId.trim(), projectId.trim()) } }