package com.zacharee1.systemuituner.services;

import android.annotation.TargetApi;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.drawable.Icon;
import android.os.BatteryManager;
import android.service.quicksettings.Tile;
import android.service.quicksettings.TileService;

import com.zacharee1.systemuituner.R;

/**
 * Created by Zacha on 5/21/2017.
 */

@TargetApi(24)
public class BatteryTileService extends TileService {

    private final IntentFilter mFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);

    private BC mReceiver;
    private Intent mBatteryStatus;

    @SuppressWarnings("FieldCanBeLocal")
    private boolean mIsCharging;
    @SuppressWarnings("FieldCanBeLocal")
    private int mBatteryPercent;

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        mBatteryStatus = registerReceiver(mReceiver = new BC(), mFilter);
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onStartListening() {
        Tile battery = getQsTile();
        mBatteryStatus = registerReceiver(mReceiver = new BC(), mFilter);

        battery.setState(Tile.STATE_ACTIVE);
        setBat(mBatteryStatus);
        battery.updateTile();
    }

    @Override
    public void onClick() {
        Intent intentBatteryUsage = new Intent(Intent.ACTION_POWER_USAGE_SUMMARY);
        startActivity(intentBatteryUsage);

        Intent it = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
        sendBroadcast(it);
    }

    @Override
    public void onDestroy() {
        try {
            unregisterReceiver(mReceiver);
        } catch (Exception e) {
            e.printStackTrace();
        }
        super.onDestroy();
    }

    private void setBat(Intent intent) {
        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);

        mIsCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                status == BatteryManager.BATTERY_STATUS_FULL;

//        int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

        mBatteryPercent = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);

        Tile battery = getQsTile();

        int resId;

        if (mBatteryPercent >= 95) {
             resId = mIsCharging ? R.drawable.ic_battery_charging_full : R.drawable.ic_battery;
        } else if (mBatteryPercent >= 85) {
            resId = mIsCharging ? R.drawable.ic_battery_charging_90 : R.drawable.ic_battery_90;
        } else if (mBatteryPercent >= 70) {
            resId = mIsCharging ? R.drawable.ic_battery_charging_80 : R.drawable.ic_battery_80;
        } else if (mBatteryPercent >= 55) {
            resId = mIsCharging ? R.drawable.ic_battery_charging_60 : R.drawable.ic_battery_60;
        } else if (mBatteryPercent >= 40) {
            resId = mIsCharging ? R.drawable.ic_battery_charging_50 : R.drawable.ic_battery_50;
        } else if (mBatteryPercent >= 25) {
            resId = mIsCharging ? R.drawable.ic_battery_charging_30 : R.drawable.ic_battery_30;
        } else if (mBatteryPercent >= 15) {
            resId = mIsCharging ? R.drawable.ic_battery_charging_20 : R.drawable.ic_battery_20;
        } else {
            resId = mIsCharging ? R.drawable.ic_battery_charging_20 : R.drawable.ic_battery_alert;
        }

        battery.setIcon(Icon.createWithResource(this, resId));
        battery.setLabel(String.valueOf(mBatteryPercent).concat("%"));
        battery.updateTile();
    }

    private class BC extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            setBat(intent);
        }
    }
}