package com.ariacockpit

import android.content.Intent
import android.os.Build
import android.util.Log
import com.facebook.react.bridge.Promise
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReactContextBaseJavaModule
import com.facebook.react.bridge.ReactMethod

/**
 * RN-Bridge fuer den AriaPlaybackService.
 *
 * Wird vom JS waehrend einer TTS-Wiedergabe gestartet damit Android den
 * App-Prozess nicht killt wenn die App im Hintergrund ist (= ARIA spricht
 * weiter, auch wenn Stefan die App minimiert hat).
 *
 * Service stoppt entweder explizit per stop() oder wird von Android
 * mitgekillt wenn der Prozess weg ist (was bei Foreground-Service nur
 * passiert wenn der User die App force-stopped).
 */
class BackgroundAudioModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {
    override fun getName() = "BackgroundAudio"

    companion object { private const val TAG = "BackgroundAudio" }

    @ReactMethod
    fun start(reason: String, promise: Promise) {
        try {
            val ctx = reactApplicationContext
            val intent = Intent(ctx, AriaPlaybackService::class.java)
            intent.putExtra(AriaPlaybackService.EXTRA_REASON, reason ?: "")
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                ctx.startForegroundService(intent)
            } else {
                ctx.startService(intent)
            }
            promise.resolve(true)
        } catch (e: Exception) {
            Log.w(TAG, "start fehlgeschlagen: ${e.message}")
            promise.reject("START_FAILED", e.message ?: "Unbekannter Fehler", e)
        }
    }

    @ReactMethod
    fun stop(promise: Promise) {
        try {
            val ctx = reactApplicationContext
            ctx.stopService(Intent(ctx, AriaPlaybackService::class.java))
            promise.resolve(true)
        } catch (e: Exception) {
            Log.w(TAG, "stop fehlgeschlagen: ${e.message}")
            promise.reject("STOP_FAILED", e.message ?: "Unbekannter Fehler", e)
        }
    }

    @ReactMethod fun addListener(eventName: String) {}
    @ReactMethod fun removeListeners(count: Int) {}
}
