package com.isp.bkashautomation.receivers import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.provider.Telephony import android.util.Log import androidx.work.Data import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkManager import com.isp.bkashautomation.network.NetworkWorker import com.isp.bkashautomation.parser.RegexParser class SmsReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (intent.action != Telephony.Sms.Intents.SMS_RECEIVED_ACTION) return val messages = Telephony.Sms.Intents.getMessagesFromIntent(intent) val prefs = context.getSharedPreferences("isp_bkash_prefs", Context.MODE_PRIVATE) val serverUrl = prefs.getString("server_url", "https://isp.example.com/api/bkash-sim/webhook") ?: "" val secretKey = prefs.getString("secret_key", "android_companion_sim_secret_key_2026") ?: "" for (sms in messages) { val sender = sms.originatingAddress ?: "" val body = sms.messageBody ?: "" Log.d("SmsReceiver", "Received SMS from $sender: $body") // Filter for bKash or 16247 or custom test numbers val isBkashSender = sender.contains("bKash", ignoreCase = true) || sender.contains("16247") || sender.startsWith("+8801") if (isBkashSender) { val parsed = RegexParser.parse(body, sender) if (parsed != null) { Log.i("SmsReceiver", "Extracted bKash Payment: TrxID=${parsed.trxId}, Amount=${parsed.amount}, Ref=${parsed.referenceUsername}") val inputData = Data.Builder() .putString("SERVER_URL", serverUrl) .putString("SECRET_KEY", secretKey) .putString("RAW_SMS", parsed.rawText) .putString("TRX_ID", parsed.trxId) .putDouble("AMOUNT", parsed.amount) .putString("REFERENCE", parsed.referenceUsername) .build() val workRequest = OneTimeWorkRequestBuilder() .setInputData(inputData) .build() WorkManager.getInstance(context).enqueue(workRequest) } } } } }