var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
  for (var name in all)
    __defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    for (let key of __getOwnPropNames(from))
      if (!__hasOwnProp.call(to, key) && key !== except)
        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  }
  return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
  // If the importer is in node compatibility mode or this is not an ESM
  // file that has been converted to a CommonJS file using a Babel-
  // compatible transform (i.e. "__esModule" has not been set), then set
  // "default" to the CommonJS "module.exports" for node compatibility.
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
  mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);

// src/components/eftposPay/huifu/hooks.ts
var hooks_exports = {};
__export(hooks_exports, {
  useCameraDevice: () => useCameraDevice,
  useScanListener: () => useScanListener,
  useScannerDevice: () => useScannerDevice,
  useTerminal: () => useTerminal
});
module.exports = __toCommonJS(hooks_exports);
var import_react = require("react");
var import_useEngineContext = __toESM(require("../../../hooks/useEngineContext"));
var useTerminal = () => {
  var _a, _b, _c;
  const context = (0, import_useEngineContext.default)();
  const { interaction, isTerminal } = ((_a = context.appHelper) == null ? void 0 : _a.utils) || {};
  return {
    isTerminal: isTerminal && isTerminal() || ((_c = (_b = interaction == null ? void 0 : interaction.utils) == null ? void 0 : _b.isAppEnv) == null ? void 0 : _c.call(_b))
  };
};
var useScannerDevice = () => {
  var _a;
  const [scannerStatus, setScannerStatus] = (0, import_react.useState)(false);
  const context = (0, import_useEngineContext.default)();
  const { interaction } = ((_a = context.appHelper) == null ? void 0 : _a.utils) || {};
  (0, import_react.useEffect)(() => {
    var _a2, _b, _c, _d;
    (_b = (_a2 = interaction == null ? void 0 : interaction.utils) == null ? void 0 : _a2.postMessageToApp) == null ? void 0 : _b.call(_a2, {
      module: "global",
      key: "get_peripherals_status",
      data: {}
    });
    (_d = (_c = interaction == null ? void 0 : interaction.utils) == null ? void 0 : _c.mountFunction) == null ? void 0 : _d.call(
      _c,
      "global",
      "peripheralsStatus",
      (strPeripherals) => {
        try {
          const peripherals = JSON.parse(strPeripherals);
          setScannerStatus((peripherals == null ? void 0 : peripherals.scanner) == "connected");
        } catch (err) {
          console.error(err);
        }
      }
    );
  }, []);
  return {
    scannerStatus
  };
};
var useCameraDevice = () => {
  var _a, _b, _c;
  const context = (0, import_useEngineContext.default)();
  const { interaction, isTerminal } = ((_a = context.appHelper) == null ? void 0 : _a.utils) || {};
  const activeCamera = (0, import_react.useCallback)(() => {
    var _a2, _b2;
    (_b2 = (_a2 = interaction == null ? void 0 : interaction.utils) == null ? void 0 : _a2.postMessageToApp) == null ? void 0 : _b2.call(_a2, {
      module: "global",
      key: "active_native_scanner",
      data: {
        source: "eftposPay_huifu"
      }
    });
  }, []);
  return {
    activeCamera,
    cameraStatus: isTerminal && isTerminal() || ((_c = (_b = interaction == null ? void 0 : interaction.utils) == null ? void 0 : _b.isAppEnv) == null ? void 0 : _c.call(_b))
  };
};
var useScanListener = () => {
  var _a, _b, _c;
  const context = (0, import_useEngineContext.default)();
  const { interaction, isTerminal } = ((_a = context.appHelper) == null ? void 0 : _a.utils) || {};
  const [scanResult, setScanResult] = (0, import_react.useState)({ type: "scanner", value: "" });
  const isNativeEnv = isTerminal && isTerminal() || ((_c = (_b = interaction == null ? void 0 : interaction.utils) == null ? void 0 : _b.isAppEnv) == null ? void 0 : _c.call(_b));
  (0, import_react.useEffect)(() => {
    var _a2, _b2;
    (_b2 = (_a2 = interaction == null ? void 0 : interaction.utils) == null ? void 0 : _a2.mountFunction) == null ? void 0 : _b2.call(
      _a2,
      "global",
      "peripheralsResult",
      (strVal) => {
        try {
          const val = JSON.parse(strVal);
          setScanResult(val);
        } catch (err) {
          console.error(err);
          setScanResult({ type: "scanner", value: "" });
        }
      }
    );
    let inputBuffer = "";
    let lastInputTime = 0;
    let inputTimer = null;
    const handleKeyDown = (e) => {
      if (e.key === "Shift" || e.key === "Control" || e.key === "Alt" || e.key === "Meta" || e.key === "Tab" || e.key === "CapsLock" || e.key === "Escape" || e.key.startsWith("Arrow") || e.ctrlKey || e.metaKey) {
        return;
      }
      const currentTime = Date.now();
      const timeDiff = currentTime - lastInputTime;
      if (e.key === "Enter") {
        const trimmedCode = inputBuffer.trim();
        if (trimmedCode.length >= 10) {
          setScanResult({
            type: "scanner",
            value: trimmedCode
          });
        }
        inputBuffer = "";
        lastInputTime = 0;
        if (inputTimer) {
          clearTimeout(inputTimer);
          inputTimer = null;
        }
        return;
      }
      if (timeDiff < 30 && inputBuffer.length > 0) {
        inputBuffer += e.key;
      } else {
        inputBuffer = e.key;
      }
      lastInputTime = currentTime;
      if (inputTimer) {
        clearTimeout(inputTimer);
      }
      inputTimer = setTimeout(() => {
        const trimmedCode = inputBuffer.trim();
        if (trimmedCode.length >= 10) {
          setScanResult({
            type: "scanner",
            value: trimmedCode
          });
        }
        inputBuffer = "";
      }, 100);
    };
    if (!isNativeEnv) {
      document.addEventListener("keydown", handleKeyDown);
    }
    return () => {
      if (!isNativeEnv) {
        document.removeEventListener("keydown", handleKeyDown);
      }
      if (inputTimer) {
        clearTimeout(inputTimer);
      }
    };
  }, []);
  return {
    scanResult
  };
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
  useCameraDevice,
  useScanListener,
  useScannerDevice,
  useTerminal
});
