/// MeshCore BLE and Protocol Constants
class MeshCoreConstants {
  // Supported protocol version
  static const int supportedCompanionProtocolVersion = 1;

  // BLE Service and Characteristic UUIDs
  static const String bleServiceUuid =
      '6E400001-B5A3-F393-E0A9-E50E24DCCA9E';
  static const String bleCharacteristicRxUuid =
      '6E400002-B5A3-F393-E0A9-E50E24DCCA9E'; // Write
  static const String bleCharacteristicTxUuid =
      '6E400003-B5A3-F393-E0A9-E50E24DCCA9E'; // Notify

  // Command Codes (App -> Device)
  static const int cmdAppStart = 1;
  static const int cmdSendTxtMsg = 2;
  static const int cmdSendChannelTxtMsg = 3;
  static const int cmdGetContacts = 4;
  static const int cmdGetDeviceTime = 5;
  static const int cmdSetDeviceTime = 6;
  static const int cmdSendSelfAdvert = 7;
  static const int cmdSetAdvertName = 8;
  static const int cmdAddUpdateContact = 9;
  static const int cmdSyncNextMessage = 10;
  static const int cmdSetRadioParams = 11;
  static const int cmdSetTxPower = 12;
  static const int cmdResetPath = 13;
  static const int cmdSetAdvertLatLon = 14;
  static const int cmdRemoveContact = 15;
  static const int cmdShareContact = 16;
  static const int cmdExportContact = 17;
  static const int cmdImportContact = 18;
  static const int cmdReboot = 19;
  static const int cmdGetBatteryVoltage = 20;
  static const int cmdSetTuningParams = 21;
  static const int cmdDeviceQuery = 22;
  static const int cmdExportPrivateKey = 23;
  static const int cmdImportPrivateKey = 24;
  static const int cmdSendRawData = 25;
  static const int cmdSendLogin = 26;
  static const int cmdSendStatusReq = 27;
  static const int cmdGetChannel = 31;
  static const int cmdSetChannel = 32;
  static const int cmdSignStart = 33;
  static const int cmdSignData = 34;
  static const int cmdSignFinish = 35;
  static const int cmdSendTracePath = 36;
  static const int cmdSetOtherParams = 38;
  static const int cmdSendTelemetryReq = 39;
  static const int cmdSendBinaryReq = 50;

  // Response Codes (Device -> App)
  static const int respOk = 0;
  static const int respErr = 1;
  static const int respContactsStart = 2;
  static const int respContact = 3;
  static const int respEndOfContacts = 4;
  static const int respSelfInfo = 5;
  static const int respSent = 6;
  static const int respContactMsgRecv = 7;
  static const int respChannelMsgRecv = 8;
  static const int respCurrTime = 9;
  static const int respNoMoreMessages = 10;
  static const int respExportContact = 11;
  static const int respBatteryVoltage = 12;
  static const int respDeviceInfo = 13;
  static const int respPrivateKey = 14;
  static const int respDisabled = 15;
  static const int respChannelInfo = 18;
  static const int respSignStart = 19;
  static const int respSignature = 20;
  static const int respCustomVars = 21;
  static const int respAdvertPath = 22;
  static const int respTuningParams = 21; // Same as respCustomVars per protocol

  // Push Codes (Device -> App, unsolicited)
  static const int pushAdvert = 0x80;
  static const int pushPathUpdated = 0x81;
  static const int pushSendConfirmed = 0x82;
  static const int pushMsgWaiting = 0x83;
  static const int pushRawData = 0x84;
  static const int pushLoginSuccess = 0x85;
  static const int pushLoginFail = 0x86;
  static const int pushStatusResponse = 0x87;
  static const int pushLogRxData = 0x88;
  static const int pushTraceData = 0x89;
  static const int pushNewAdvert = 0x8A;
  static const int pushTelemetryResponse = 0x8B;
  static const int pushBinaryResponse = 0x8C;

  // Error Codes
  static const int errUnsupportedCmd = 1;
  static const int errNotFound = 2;
  static const int errTableFull = 3;
  static const int errBadState = 4;
  static const int errFileIoError = 5;
  static const int errIllegalArg = 6;

  // Advert Types
  static const int advTypeNone = 0;
  static const int advTypeChat = 1;
  static const int advTypeRepeater = 2;
  static const int advTypeRoom = 3;

  // Self Advert Types
  static const int selfAdvertZeroHop = 0;
  static const int selfAdvertFlood = 1;

  // Text Types
  static const int txtTypePlain = 0;
  static const int txtTypeCliData = 1;
  static const int txtTypeSignedPlain = 2;

  // Binary Request Types
  static const int binaryReqGetTelemetryData = 0x03;
  static const int binaryReqGetAvgMinMax = 0x04;
  static const int binaryReqGetAccessList = 0x05;
  static const int binaryReqGetNeighbours = 0x06;

  // Cayenne LPP Data Types
  static const int lppDigitalInput = 0;
  static const int lppDigitalOutput = 1;
  static const int lppAnalogInput = 2;
  static const int lppAnalogOutput = 3;
  static const int lppIlluminanceSensor = 101;
  static const int lppPresenceSensor = 102;
  static const int lppTemperatureSensor = 103;
  static const int lppHumiditySensor = 104;
  static const int lppAccelerometer = 113;
  static const int lppBarometer = 115;
  static const int lppVoltageSensor = 116;
  static const int lppGyrometer = 134;
  static const int lppGps = 136;

  // MTU and timing
  static const int maxMtuSize = 512;
  static const int defaultTimeout = 5000; // 5 seconds
  static const int reconnectDelay = 2000; // 2 seconds
  static const int telemetryUpdateInterval = 300000; // 5 minutes

  MeshCoreConstants._(); // Private constructor to prevent instantiation
}
