package hanson.xyz.vpnhotspotmod

import android.bluetooth.BluetoothManager
import android.content.*
import android.graphics.drawable.Icon
import android.os.Build
import android.os.IBinder
import android.service.quicksettings.Tile
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.core.content.ContextCompat
import androidx.core.content.getSystemService
import hanson.xyz.vpnhotspotmod.R
import hanson.xyz.vpnhotspotmod.TetheringService
import hanson.xyz.vpnhotspotmod.manage.BluetoothTethering
import hanson.xyz.vpnhotspotmod.net.TetherType
import hanson.xyz.vpnhotspotmod.net.TetheringManager
import hanson.xyz.vpnhotspotmod.net.TetheringManager.tetheredIfaces
import hanson.xyz.vpnhotspotmod.net.wifi.WifiApManager
import hanson.xyz.vpnhotspotmod.util.broadcastReceiver
import hanson.xyz.vpnhotspotmod.util.readableMessage
import hanson.xyz.vpnhotspotmod.util.stopAndUnbind
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import timber.log.Timber
import android.content.Context
import android.content.Intent
import android.os.Handler
import android.os.Looper
import android.net.ConnectivityManager

// added by hansonxyz

class MyBroadcastReceiver : BroadcastReceiver(), TetheringManager.StartTetheringCallback {

    private val handler = Handler(Looper.getMainLooper())

    /**
     * Called when tethering has been successfully started.
     */
//    override fun onTetheringStarted() {
//        // Retrieve the list of currently active tethering interfaces
//        val tetheredInterfaces = TetheringManager.tetheredIfaces
//
//        // Iterate over the interfaces and start the monitoring service for each
//        tetheredInterfaces.forEach { iface ->
//            Intent(App.app, TetheringService::class.java).apply {
//                action = TetheringService.ACTION_START_MONITORING
//                putExtra(TetheringService.EXTRA_INTERFACE, iface)
//                App.app.startForegroundService(this)
//            }
//        }
//    }

//
//    /**
//     * Called when starting tethering failed.
//     *
//     * @param error The error that caused the failure.
//     */
//    override fun onTetheringFailed(error: Int? = null) { }


    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action.toString().contains("BT_TETHER_START")) {
            TetheringManager.startTethering(TetheringManager.TETHERING_BLUETOOTH, false, this)
        }
        if (intent.action.toString().contains("BT_TETHER_STOP")) {
            TetheringManager.stopTethering(TetheringManager.TETHERING_BLUETOOTH)
        }
        if (intent.action.toString().contains("WIFI_TETHER_START")) {
            val config = synchronized(BootReceiver) { BootReceiver.config }
            if (!(config == null || config.startables.isEmpty())) {
                for (startable in config.startables.values) startable.start(App.app)
            }
            TetheringManager.startTethering(TetheringManager.TETHERING_WIFI, false, this)

        }
        if (intent.action.toString().contains("WIFI_TETHER_STOP")) {
            TetheringManager.stopTethering(TetheringManager.TETHERING_WIFI)
        }
        if (intent.action.toString().contains("android.net.conn.TETHER_STATE_CHANGED")) {
            @Suppress("UNCHECKED_CAST")
            val tetheredInterfaces = intent.getStringArrayListExtra("tetherArray")
            tetheredInterfaces?.forEach { iface ->
                Intent(context, TetheringService::class.java).apply {
                    putExtra(TetheringService.EXTRA_ADD_INTERFACES, arrayOf(iface))
                    context.startForegroundService(this)
                }
            }
        }
    }

}
