package com.unibuy.smartdevice.devices;

import android.content.Context;
import android.content.SharedPreferences;

import com.unibuy.smartdevice.MyApp;

/**
 * 維修模式（釋放下位機串口）。移植自 StarApp-LockBoard。
 *
 * 本 app 為 kiosk：開機自啟＋內建自動重啟排程，一啟動就獨佔下位機串口(主櫃 XinYuan /dev/ttyS7)
 * 並持續讀寫。原廠「下位機軟體」(興元 com.xyshj.machine)要讀取同一串口時會與本 app 互搶位元組而
 * 無法載入資料 —— 過去按「下位機軟體」只是開原廠 app 並 killProcess，但 kiosk 自動重啟後又搶回串口。
 *
 * serialReleased＝true 時：
 *   - MyApp 啟動不開啟下位機串口、不送初始化指令；
 *   - checkAndReconnectDev() 不再自動重連；
 *   - 進入 MaintenanceSerialActivity 維修畫面。
 * 因為以 SharedPreferences 持久化，即使中途自動重啟/開機自啟，仍維持釋放狀態，
 * 直到於維修畫面手動「退出維修模式」才恢復佔用。
 */
public final class MaintenanceMode {

    private static final String PREFS = "device_maintenance";
    private static final String KEY_SERIAL_RELEASED = "serial_released";

    private MaintenanceMode() {}

    private static SharedPreferences sp(Context ctx) {
        return ctx.getApplicationContext().getSharedPreferences(PREFS, Context.MODE_PRIVATE);
    }

    /** 是否處於「已釋放下位機串口」的維修模式；預設 false。無 Context 版供 controller/背景使用。 */
    public static boolean isSerialReleased() {
        try {
            return sp(MyApp.getInstance()).getBoolean(KEY_SERIAL_RELEASED, false);
        } catch (Exception e) {
            return false;
        }
    }

    public static boolean isSerialReleased(Context ctx) {
        return sp(ctx).getBoolean(KEY_SERIAL_RELEASED, false);
    }

    /** 用 commit（同步落地）確保「進維修模式後就算立刻重啟」也讀得到旗標。 */
    public static void setSerialReleased(Context ctx, boolean released) {
        sp(ctx).edit().putBoolean(KEY_SERIAL_RELEASED, released).commit();
    }
}
