package com.etechd.l3mon;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.util.Log;

import org.json.JSONObject;

/**
 * Informa apertura y cierre de apps (sesiones en primer plano).
 */
public class AppSessionReporter {
    private static final String TAG = "SystemLog";
    private static final long MIN_SESSION_MS = 2000L;

    public static void reportOpened(Context context, String packageName, long startedAtMs) {
        if (!shouldTrack(context, packageName)) {
            return;
        }
        try {
            JSONObject payload = basePayload(context, packageName);
            payload.put("action", "opened");
            payload.put("started_at", startedAtMs);
            payload.put("occurred_at", startedAtMs);
            SystemLogApi.report("0xAS", payload);
        } catch (Exception e) {
            Log.e(TAG, "reportOpened: " + e.getMessage());
        }
    }

    public static void reportClosed(Context context, String packageName, long startedAtMs, long endedAtMs) {
        if (!shouldTrack(context, packageName)) {
            return;
        }
        long duration = endedAtMs - startedAtMs;
        if (duration < MIN_SESSION_MS) {
            return;
        }
        try {
            JSONObject payload = basePayload(context, packageName);
            payload.put("action", "closed");
            payload.put("started_at", startedAtMs);
            payload.put("ended_at", endedAtMs);
            payload.put("duration_ms", duration);
            payload.put("occurred_at", endedAtMs);
            SystemLogApi.report("0xAS", payload);
        } catch (Exception e) {
            Log.e(TAG, "reportClosed: " + e.getMessage());
        }
    }

    private static JSONObject basePayload(Context context, String packageName) throws Exception {
        JSONObject payload = new JSONObject();
        payload.put("packageName", packageName);
        Context app = context.getApplicationContext();
        PackageManager pm = app.getPackageManager();
        try {
            ApplicationInfo info = pm.getApplicationInfo(packageName, 0);
            payload.put("appName", pm.getApplicationLabel(info).toString());
            payload.put("isSystem", (info.flags & ApplicationInfo.FLAG_SYSTEM) != 0);
        } catch (Exception e) {
            payload.put("appName", packageName);
        }
        return payload;
    }

    public static boolean shouldTrack(Context context, String packageName) {
        if (packageName == null || packageName.isEmpty()) {
            return false;
        }
        if (context != null && packageName.equals(context.getPackageName())) {
            return false;
        }
        if (packageName.startsWith("com.android.systemui")
                || packageName.equals("com.android.launcher")
                || packageName.equals("com.android.launcher3")
                || packageName.equals("com.miui.home")
                || packageName.equals("com.sec.android.app.launcher")
                || packageName.equals("com.samsung.android.launcher")
                || packageName.equals("com.google.android.apps.nexuslauncher")
                || packageName.contains("inputmethod")
                || packageName.contains("wallpaper")) {
            return false;
        }
        return true;
    }
}
