package org.fnives.flutter.experiment_shorebird

import android.app.AlarmManager
import android.app.PendingIntent
import android.content.Intent
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel


class MainActivity : FlutterActivity() {
    private val channel = "MainChannel"

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        MethodChannel(
            flutterEngine.dartExecutor.binaryMessenger,
            channel
        ).setMethodCallHandler { call, result ->
            when (call.method) {
                Methods.RESTART.methodName -> {
                    try {
                        if (this.intent.categories.contains(Intent.CATEGORY_HOME)) {
                            if (isDefaultHomeApp()) {
                                RestartActivity.restart(this, getHomeIntent())
                            } else {
                                RestartActivity.restart(this, Intent.makeRestartActivityTask(componentName))
                            }
                        } else {
                            RestartActivity.restart(this, Intent.makeRestartActivityTask(componentName))
                        }
                        result.success(null)
                    } catch (e: Throwable) {
                        result.error("couldn't start activity", e.message ?: "", null)
                    }
                }
            }
        }
    }

    private fun getHomeIntent() =
        Intent(intent.action).apply {
            flags = Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
            intent.setComponent(component)
            intent.categories.forEach {
                addCategory(it)
            }
        }

    private fun isDefaultHomeApp(): Boolean {
        val intent = Intent(Intent.ACTION_MAIN)
        intent.addCategory(Intent.CATEGORY_HOME)
        val res = packageManager.resolveActivity(intent, 0)
        val isHomeApp = res?.activityInfo != null && (packageName == res.activityInfo.packageName)
        return isHomeApp
    }
}
