package com.parentalmonitor.child.services;

import android.app.Service;
import android.content.*;
import android.os.*;
import com.parentalmonitor.child.api.ApiClient;
import org.json.JSONObject;

public class ScreenTimeService extends Service {
    private long screenOnTime = 0;
    private long lastScreenOn = 0;
    private int unlockCount = 0;
    private BroadcastReceiver screenReceiver;

    @Override
    public void onCreate() {
        super.onCreate();
        screenReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (Intent.ACTION_SCREEN_ON.equals(intent.getAction())) {
                    lastScreenOn = System.currentTimeMillis();
                    unlockCount++;
                } else if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) {
                    if (lastScreenOn > 0) {
                        screenOnTime += System.currentTimeMillis() - lastScreenOn;
                        lastScreenOn = 0;
                        syncScreenTime();
                    }
                }
            }
        };
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        registerReceiver(screenReceiver, filter);
    }

    private void syncScreenTime() {
        try {
            JSONObject data = new JSONObject();
            data.put("device_id", ApiClient.getInstance(this).getDeviceId());
            data.put("total_minutes", screenOnTime / 60000);
            data.put("unlock_count", unlockCount);
            data.put("date", new java.text.SimpleDateFormat("yyyy-MM-dd", java.util.Locale.US)
                .format(new java.util.Date()));
            ApiClient.getInstance(this).postAsync("/api/screen-time/logs", data, null);
        } catch (Exception e) { e.printStackTrace(); }
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) { return START_STICKY; }
    @Override
    public IBinder onBind(Intent intent) { return null; }
    @Override
    public void onDestroy() { unregisterReceiver(screenReceiver); super.onDestroy(); }
}
