import protobuf from 'protobufjs';

// 与 webrtc_controller_flutter/proto/control_message.proto 完全一致的运行时编码。
// 浏览器端通过 protobufjs 动态加载 .proto，构造 ControlMessage 并序列化为二进制，
// 经 DataChannel 发送，由 Android 被控端 InputCommandHandler 解析执行。

let ControlMessage = null;

export const Action = {
  ACTION_UNKNOWN: 0,
  TOUCH: 1,
  SWIPE: 2,
  KEY: 3,
  LONG_PRESS: 4,
  MOTION_EVENT: 5,
  SET_RESOLUTION: 6,
  REPORT_RESOLUTION: 7,
};

export async function loadProto() {
  if (ControlMessage) return;
  const root = await protobuf.load(`${import.meta.env.BASE_URL}control_message.proto`);
  ControlMessage = root.lookupType('com.ttstd.control.ControlMessage');
}

export function encodeControlMessage(fields) {
  if (!ControlMessage) throw new Error('protobuf 尚未加载，请先调用 loadProto()');
  const err = ControlMessage.verify(fields);
  if (err) throw new Error(err);
  const message = ControlMessage.create(fields);
  // 返回 Uint8Array，可直接通过 RTCDataChannel.send 发送（二进制）。
  return ControlMessage.encode(message).finish();
}

/** 解析被控端经 DataChannel 发来的二进制 protobuf（如分辨率上报）。返回消息对象。 */
export function decodeControlMessage(bytes) {
  if (!ControlMessage) throw new Error('protobuf 尚未加载，请先调用 loadProto()');
  return ControlMessage.decode(bytes);
}
