package com.unibuy.smartdevice.devices;

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

import com.unibuy.smartdevice.MyApp;

/**
 * 串口方案（本機硬體設定，不回寫雲端）。
 *
 * 不同 IPC 主板的下位機(主櫃 XinYuan)與刷卡機(NFCPay)串口位置不一致，需可現場切換：
 *   - LEGACY  (舊版本 )：下位機 /dev/ttyS1、刷卡機 /dev/ttyS2
 *   - STARTECH(星科技版本)：下位機 /dev/ttyS7、刷卡機 /dev/ttyS6
 *
 * 以 SharedPreferences 持久化；ComPort.getFilepath() 依此回傳實際 tty 路徑。
 * 串口在 app 啟動時就綁定，故切換方案後需重啟 app 才會套用。
 * 預設 LEGACY，與切換功能加入前的行為(ttyS1/ttyS2)相同。
 */
public final class PortProfile {

    private static final String PREFS = "device_port_profile";
    private static final String KEY_PROFILE = "profile";

    public static final String LEGACY = "legacy";     // 舊版本  ：ttyS1 / ttyS2
    public static final String STARTECH = "startech"; // 星科技版本：ttyS7 / ttyS6

    // 未設定時的預設方案。通用版本為 LEGACY（ttyS1/ttyS2）。
    // ⚠️代樂美等星科技主板專用建置需改為 STARTECH（ttyS7/ttyS6，裝上即用免手動切），該改動勿進通用主線。
    public static final String DEFAULT_PROFILE = LEGACY;

    private PortProfile() {}

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

    /** 目前串口方案；未設定時採 DEFAULT_PROFILE。無 Context 版供 enum/背景使用。 */
    public static String getProfile() {
        try {
            return sp(MyApp.getInstance()).getString(KEY_PROFILE, DEFAULT_PROFILE);
        } catch (Exception e) {
            return DEFAULT_PROFILE;
        }
    }

    public static String getProfile(Context ctx) {
        return sp(ctx).getString(KEY_PROFILE, DEFAULT_PROFILE);
    }

    /** 是否為星科技方案(ttyS7/ttyS6)。 */
    public static boolean isStarTech() {
        return STARTECH.equals(getProfile());
    }

    /** 用 commit（同步落地）確保切換後即使立刻重啟也讀得到。 */
    public static void setProfile(Context ctx, String profile) {
        String v = STARTECH.equals(profile) ? STARTECH : LEGACY;
        sp(ctx).edit().putString(KEY_PROFILE, v).commit();
    }

    /** 方案的中文顯示名稱。 */
    public static String displayName(String profile) {
        return STARTECH.equals(profile) ? "星科技（下位機 ttyS7／刷卡機 ttyS6）"
                : "舊版本（下位機 ttyS1／刷卡機 ttyS2）";
    }
}
