package com.duolebo.blyrobot.service

import android.annotation.SuppressLint
import android.app.Service
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.IBinder
import android.support.v4.content.LocalBroadcastManager
import android.util.Log
import com.duolebo.blyrobot.data.ApkInfo
import com.duolebo.blyrobot.data.Task
import com.duolebo.blyrobot.tools.TaskManager
import com.duolebo.blyrobot.util.AdbUtil
import com.duolebo.blyrobot.util.AppUtil
import com.duolebo.blyrobot.util.Config
import com.duolebo.blyrobot.util.Constants
import org.json.JSONObject
import java.util.*

@SuppressLint("Registered")
class BylRobotService: Service() {

    private val TAG = "BylRobotService"
    private var count = 0

    private val broadcastReceiver = object : BroadcastReceiver() {
        override fun onReceive(p0: Context?, intent: Intent?) {
            if (intent != null) {
                val cmd = intent.getStringExtra(Constants.KEY_CMD)
                when (cmd) {
                    Constants.CMD_START -> loadTask()
                    Constants.CMD_STOP -> stopTask()
                }
            }
        }
    }

    override fun onCreate() {
        super.onCreate()
        initBroadcast()
    }

    private fun initBroadcast() {
        Log.i(TAG, "initBroadcast...")
        val intentFilter = IntentFilter(Constants.ACTION_LOCAL_SERVICE)
        LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, intentFilter)
    }

    private fun loadTask() {
        Log.i(TAG, "loadTask...")

        if (Config.instance.isDebug) {
            val task = Task(this)
            val apkInfo = ApkInfo()
            val apkJson = JSONObject(AppUtil.readFromAssert(this, "test.json"))
            apkInfo.from(apkJson)
            task.from(apkInfo)
            TaskManager.instance.add(task)
        }

        TaskManager.instance.start()
    }

    private fun stopTask() {
        TaskManager.instance.stop()
    }


    override fun onBind(p0: Intent?): IBinder {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    override fun onDestroy() {
        Log.i(TAG, "destroy...")
        super.onDestroy()
        LocalBroadcastManager.getInstance(this).unregisterReceiver(broadcastReceiver)
    }
}