import Context from "android.content.Context";
import BatteryManager from "android.os.BatteryManager";

import { GetBatteryInfo, GetBatteryInfoOptions, GetBatteryInfoSuccess, GetBatteryInfoResult,GetBatteryInfoSync } from '../interface.uts'
import IntentFilter from 'android.content.IntentFilter';
import Intent from 'android.content.Intent';

import { GetBatteryInfoFailImpl } from '../unierror';

/**
 * 异步获取电量
 */
export const getBatteryInfo : GetBatteryInfo = function (options : GetBatteryInfoOptions) {


    const context = UTSAndroid.getAppContext();
    if (context != null) {
        const manager = context.getSystemService(
            Context.BATTERY_SERVICE
        ) as BatteryManager;
        const level = manager.getIntProperty(
            BatteryManager.BATTERY_PROPERTY_CAPACITY
        );

        let ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        let batteryStatus = context.registerReceiver(null, ifilter);
        let status = batteryStatus?.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
        let isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL;

        const res : GetBatteryInfoSuccess = {
            errMsg: 'getBatteryInfo:ok',
            level,
            isCharging: isCharging
        }
        options.success?.(res)
        options.complete?.(res)
    } else {
		let res = new GetBatteryInfoFailImpl(1001);
        options.fail?.(res)
        options.complete?.(res)
    }
}

/**
 * 同步获取电量示例
 */
export const getBatteryInfoSync : GetBatteryInfoSync = function (): GetBatteryInfoResult {

    const context = UTSAndroid.getAppContext();
    if (context != null) {


        const manager = context.getSystemService(
            Context.BATTERY_SERVICE
        ) as BatteryManager;
        const level = manager.getIntProperty(
            BatteryManager.BATTERY_PROPERTY_CAPACITY
        );
        
        let ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        let batteryStatus = context.registerReceiver(null, ifilter);
        let status = batteryStatus?.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
        let isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL;
        
        const res : GetBatteryInfoResult = {
            level: level,
            isCharging: isCharging
        };

        return res;
    }
    else {
        /**
         * 无有效上下文
         */
        const res : GetBatteryInfoResult = {
            level: -1,
            isCharging: false
        };
        return res;
    }


}
