package com.secureline.server;

import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.os.PowerManager;
import android.os.SystemClock;

import android.util.Slog;

public class SecureLineScreenLoopController {

    private static final String TAG = "SecureLineScreenLoop";

    private static final long MID_LOCK_INTERVAL_MS = 60000;  // 40 sec
    private static final long HARD_LOCK_INTERVAL_MS = 30000;  // 30 sec

    private final Context mContext;
    private final Handler mHandler;
    private final PowerManager mPowerManager;

    private boolean mRunning = false;
    private long mInterval = 0;

    public SecureLineScreenLoopController(Context context) {
        mContext = context;
        mHandler = new Handler(Looper.getMainLooper());
        mPowerManager = context.getSystemService(PowerManager.class);
    }

    public void startMidLock() {
        Slog.w(TAG, "Starting MID_LOCK screen loop");
        mInterval = MID_LOCK_INTERVAL_MS;
        start();
    }

    public void startHardLock() {
	Slog.w(TAG, "Starting HARD_LOCK screen loop");
        mInterval = HARD_LOCK_INTERVAL_MS;
        start();
    }

    public void stop() {
        Slog.i(TAG, "Stopping screen loop");
        mRunning = false;
        mHandler.removeCallbacksAndMessages(null);
    }

    private void start() {
        if (mRunning) return;
        mRunning = true;
        schedule();
    }

    private void schedule() {
        if (!mRunning) return;

        mHandler.postDelayed(() -> {
            try {
                if (mPowerManager != null && mPowerManager.isInteractive()) {
                    Slog.w(TAG, "Forcing screen sleep (loop)");
		    mPowerManager.goToSleep(SystemClock.uptimeMillis());
                }
            } catch (Exception e) {
                Slog.e(TAG, "Sleep error", e);
            }

            schedule();

        }, mInterval);
    }
}
