package com.parentalmonitor.child.services;

import android.app.*;
import android.app.usage.*;
import android.content.*;
import android.os.*;
import com.parentalmonitor.child.api.ApiClient;
import org.json.*;
import java.util.*;

public class AppMonitorService extends Service {
    private Handler handler;
    private Runnable monitorRunnable;
    private Map<String, Long> lastUsageMap = new HashMap<>();

    @Override
    public void onCreate() {
        super.onCreate();
        handler = new Handler(Looper.getMainLooper());
        monitorRunnable = () -> {
            collectAppUsage();
            handler.postDelayed(monitorRunnable, 60000);
        };
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        handler.post(monitorRunnable);
        return START_STICKY;
    }

    private void collectAppUsage() {
        try {
            UsageStatsManager usm = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
            long now = System.currentTimeMillis();
            List<UsageStats> stats = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, now - 86400000, now);
            if (stats == null) return;

            JSONArray usageArray = new JSONArray();
            for (UsageStats us : stats) {
                if (us.getTotalTimeInForeground() < 1000) continue;
                JSONObject entry = new JSONObject();
                entry.put("package_name", us.getPackageName());
                entry.put("total_time_ms", us.getTotalTimeInForeground());
                entry.put("last_used", us.getLastTimeUsed());
                usageArray.put(entry);
            }

            JSONObject data = new JSONObject();
            data.put("device_id", ApiClient.getInstance(this).getDeviceId());
            data.put("usage_data", usageArray);
            data.put("date", new java.text.SimpleDateFormat("yyyy-MM-dd", Locale.US).format(new Date()));
            ApiClient.getInstance(this).postAsync("/api/app-usage/sync", data, null);
        } catch (Exception e) { e.printStackTrace(); }
    }

    @Override
    public IBinder onBind(Intent intent) { return null; }
}
