// 三青鸟SDK通信协议——公共定义

syntax = "proto3";

// 包名
package sanqingniaopb;

// 生成的go文件包名
option go_package = ".;sanqingniaopb";
// 生成的C#文件命名空间
option csharp_namespace = "Sixelp.SanQingNiaoPb";
// 生成Java文件的包名
option java_multiple_files = true;
option java_package = "com.sixelp.sanqingniaopb";

/**************************************** 通用定义信息 ****************************************/

// SystemType 系统类型
enum SystemType {
	SystemTypeUnknown = 0;
	SystemTypeWindows = 1;
	SystemTypeLinux = 2;
	SystemTypeAndroid = 3;
}

/**************************************** 版本相关信息 ****************************************/

// VersionInfo 版本信息
message VersionInfo {
	// 应用类型
	uint32 appType = 1;
	// 版本号
	string version = 2;
	// 内部版本号
	string internalVersion = 3;
}

// VersionUpdateType 版本更新类型
enum VersionUpdateType {
	// 未知
	VersionUpdateTypeUnknown = 0;
	// 可选更新
	VersionUpdateTypeOptional = 1;
	// 静默更新
	VersionUpdateTypeQuiet = 2;
	// 强制更新
	VersionUpdateTypeForce = 3;
}

// VersionInfo 版本下载信息
message VersionDownloadInfo {
	// 版本信息
	VersionInfo versionInfo = 1;
	// 下载地址
	string url = 3;
}

/**************************************** 配置相关信息 ****************************************/

// AdvancedConfigKey 高级配置项键
enum AdvancedConfigKey {
	// 检测模式（取值范围：0-重量检测，1-图像检测；赋值字段：uint32Val）
	DetectMode = 0;

	// 重量检测模式（取值范围：0-满足最小识别重量后；赋值字段：uint32Val）
	WeightDetectMode = 1;
	// 重量检测最小触发重量（单位：克；取值范围：闭区间[1,10000]；赋值字段：uint32Val）
	WeightDetectMinValue = 2;
	// 重量检测商品叠加最小触发重量（单位：克；取值范围：闭区间[1,10000]；赋值字段：uint32Val）
	WeightDetectAppendMinValue = 3;
	// 重量检测状态判断模式（取值范围：0-外部传入，1-内部自动；赋值字段：uint32Val）
	WeightDetectStatusJudgment = 4;
	// 重量检测相机拍照延迟时间（单位：毫秒；取值范围：闭区间[0,5000]；赋值字段：uint32Val）
	WeightDetectCameraDelay = 5;

	// 图像检测模式（取值范围：0-特征相似度；赋值字段：uint32Val）
	ImageDetectMode = 20;
	// 图像检测忽略相似阈值（取值范围：闭区间[0,1000]；赋值字段：uint32Val）
	ImageDetectIgnoreThreshold = 21;
	// 图像检测特征稳定统计次数（取值范围：闭区间[2,20]；赋值字段：uint32Val）
	ImageDetectStableNumber = 22;
	// 图像检测特征稳定相似阈值（取值范围：闭区间[0,1000]；赋值字段：uint32Val）
	ImageDetectStableThreshold = 23;
	// 图像检测特征重复相似阈值（取值范围：闭区间[0,1000]；赋值字段：uint32Val）
	ImageDetectRepeatThreshold = 24;
	// 图像检测间隔时间（单位：毫秒；取值范围：闭区间[0,5000]；赋值字段：uint32Val）
	ImageDetectInterval = 25;

	// 最大识别输出数量（取值范围：闭区间[1,10]；赋值字段：uint32Val）
	MaxOutputNum = 100;
	// 推理引擎处理器使用模式（取值范围：0-均衡模式，1-性能模式；赋值字段：uint32Val）
	PerformanceMode = 101;
	// 预学习开关（取值范围：true-开启，false-关闭；赋值字段：boolVal）
	PreLearnSwitch = 102;
	// 实时学习开关（取值范围：true-开启，false-关闭；赋值字段：boolVal）
	LiveLearnSwitch = 103;
	// 演示模式开关（取值范围：true-开启，false-关闭；赋值字段：boolVal）
	DemoModeSwitch = 104;
	// 白泽算法推荐阈值（取值范围：闭区间[0,3]；赋值字段：floatVal）
	BaizeThreshold = 105;
	// 白泽算法首位推荐阈值（取值范围：闭区间[0.70,0.85]；赋值字段：floatVal）
	BaizeTopOneThreshold = 106;
}

/**************************************** 相机相关信息 ****************************************/

// CameraResolutionInfo 相机分辨率信息
message CameraResolutionInfo {
	// 图像宽度（像素）
	uint32 width = 1;
	// 图像高度（像素）
	uint32 height = 2;
	// 图像帧率（张/秒）
	uint32 fps = 3;
	// 图像帧格式，支持版本：[v1.5.3.0+]
	string format = 4;
}

// CameraInfo 相机信息
message CameraInfo {
	// 相机ID
	string id = 1;
	// 相机名称
	string name = 2;
	// 设备USB路径
	string usbPath = 3;
	// 设备系统路径
	string sysPath = 4;
	// 支持的分辨率列表
	repeated CameraResolutionInfo resolutionInfoList = 5;
}

// PlanePositionInfo 平面坐标信息
message PlanePositionInfo {
	// X轴坐标值
	uint32 x = 1;
	// Y轴坐标值
	uint32 y = 2;
}

/**************************************** 设备相关信息 ****************************************/

// VendorInfo 厂商信息
message VendorInfo {
	// 授权编码
	string code = 1;
	// 授权密钥
	string key = 2;
}

// ShopInfo 门店信息
message ShopInfo {
	// 门店编码【不允许修改】
	string code = 1;
	// 门店名称
	string name = 2;
	// 秤号别名
	string scaleAlias = 3;
	// 外部门店编码
	string externalCode = 4;
}

// ActivateCodeType 激活码类型
enum ActivateCodeType {
	// 激活码类型：未知
	ActivateCodeTypeUnknown = 0;
	// 激活码类型：测试激活码，有使用期限制，有离线时长限制
	ActivateCodeTypeTestLimitOffline = 1;
	// 激活码类型：测试激活码，有使用期限制，仅允许在线使用
	ActivateCodeTypeTestOnlyOnline = 2;
	// 激活码类型：正式激活码，有离线时长限制
	ActivateCodeTypeFormalLimitOffline = 100;
	// 激活码类型：正式激活码，允许离线使用
	ActivateCodeTypeFormalAllowOffline = 101;
}

// ActivateInfo 设备激活信息
message ActivateInfo {
	// 激活码
	string activateCode = 1;
	// 激活过期时间
	int64 activateExpireTime = 2;
	// 激活码类型
	ActivateCodeType activateCodeType = 3;
}

// DeviceInfo 设备信息
message DeviceInfo {
	// 设备SN
	string deviceSN = 1;
	// 激活信息
	ActivateInfo activateInfo = 2;
	// 门店信息
	ShopInfo shop = 3;
}

/**************************************** 识别相关信息 ****************************************/

// WeightStatus 重量状态
enum WeightStatus {
	// 不稳定
	WeightStatusUnstable = 0;
	// 稳定
	WeightStatusStable = 1;
	// 欠载
	WeightStatusUnder = 2;
	// 超载
	WeightStatusOverflow = 3;
	// 异常
	WeightStatusException = 4;
}

// LearningMode 学习模式
enum LearningMode {
	// 使用搜索方式学习
	LearningModeSearch = 0;
	// 使用快捷方式学习
	LearningModeShortcut = 1;
	// 使用输出结果学习
	LearningModeOutput = 2;
	// 跳过学习
	LearningModeSkip = 3;
	// 预包装
	LearningModePrepackaging = 4;
}

// AlgoModelInfo 算法模型信息
message AlgoModelInfo {
	// 模型代号
	uint32 code = 1;
	// 模型名称
	string name = 2;
}

/**************************************** 商品相关信息 ****************************************/

// SkuInfo 商品信息
message SkuInfo {
	// 商品唯一编码
	string code = 1;
	// 商品名称
	string name = 2;
	// 商品上级码（spuCode==code 或 spuCode为空时，该商品为顶级商品）
	string spuCode = 3;
}

// SkuFeatImageInfo 商品特征图像信息
message SkuFeatImageInfo {
	// 识别ID
	int64 id = 1;
	// 图片HTTP访问路径
	string path = 2;
}

// SkuFeatNumberInfo 商品特征数量信息
message SkuFeatNumberInfo {
	// 商品信息
	SkuInfo sku = 1;
	// 特征数量
	uint64 number = 2;
}

// SkuSaleInfo 商品销售信息
message SkuSaleInfo {
	// 销量：重量（克） 、数量
	int32 sales = 1;
	// 计价方式（0-重量计价，1-数量计价）
	int32 priceUnit = 2;
	// 原始单价（分/Kg）
	int32 price = 3;
	// 销售单价（分/Kg）
	int32 salePrice = 4;
	// 销售总价（分）
	int32 amount = 5;
	// 条码
	string barCode = 6;
	// 商品是否改价（0-未改价，1-改单价，2-改总价）
	int32 priceChangeMode = 7;
	// 商品价格类型（1-正常价格，2-临时改价，3-永久改价，4-阶梯变价）
	int32 priceType = 8;
}

// SkuDataImportMode 商品数据导入模式
enum SkuDataImportMode {
	// 增量导入
	SkuDataImportModeIncr = 0;
	// 全量导入
	SkuDataImportModeFull = 1;
}

// SkuStatus 商品状态
enum SkuStatus {
	// 不存在
	SkuStatusNone = 0;
	// 正常
	SkuStatusNormal = 1;
	// 临时锁定
	SkuStatusTemporaryLock = 2;
	// 永久锁定
	SkuStatusPermanentLock = 3;
}

// SkuStatusInfo 商品状态信息
message SkuStatusInfo {
	// 商品信息
	SkuInfo sku = 1;
	// 商品状态
	SkuStatus status = 2;
}

// SkuIconInfo 商品主图信息
message SkuIconInfo {
	// 商品信息
	SkuInfo sku = 1;
	// 匹配到的商品主图列表
	repeated string iconList = 2;
	// 匹配到的关键字列表
	repeated string keywordList = 3;
	// 匹配到的商品预学习标签
	int32 preLearningLabel = 4;
}

/************************************** 学习数据相关信息 **************************************/

// LearnDataImportMode 学习数据导入模式
enum LearnDataImportMode {
	// 全量导入
	LearnDataImportModeFull = 0;
	// 商品维度增量导入
	LearnDataImportModeIncrSku = 1;
	// 特征维度增量导入
	LearnDataImportModeIncrFeat = 2;
	// 严格模式全量导入
	LearnDataImportModeStrictFull = 3;
	// 严格模式商品维度增量导入
	LearnDataImportModeStrictIncrSku = 4;
	// 严格模式特征维度增量导入
	LearnDataImportModeStrictIncrFeat = 5;
}

// LearnDataExportMode 学习数据导出模式
enum LearnDataExportMode {
	// 全量导出
	LearnDataExportModeFull = 0;
	// 商品维度增量导出
	LearnDataExportModeIncrSku = 1;
	// 特征维度增量导出
	LearnDataExportModeIncrFeat = 2;
}

/************************************** 自动同步相关信息 **************************************/

// AutoSyncDataSyncRule 自动同步数据同步规则
enum AutoSyncDataSyncRule {
	// 自动同步数据同步规则: 禁用数据同步
	AutoSyncDataSyncRuleDisable = 0;
	// 自动同步数据同步规则: 双向数据同步
	AutoSyncDataSyncRuleDuplex = 1;
	// 自动同步数据同步规则: 仅发送数据
	AutoSyncDataSyncRuleOnlySend = 2;
	// 自动同步数据同步规则: 仅接收数据
	AutoSyncDataSyncRuleOnlyReceive = 3;
}

// AutoSyncDeviceInfo 自动同步设备信息
message AutoSyncDeviceInfo {
	// 设备SN
	string deviceSN = 1;
	// 主机名
	string hostName = 2;
	// 系统类型
	SystemType systemType = 3;
	// 算法模型
	uint32 algoModel = 4;
	// 服务端口号
	uint32 servicePort = 5;
	// IP地址列表
	repeated string ipAddrList = 6;
	// 数据同步规则
	AutoSyncDataSyncRule dataSyncRule = 7;
	// 设备状态（false:离线, true:在线）
	bool status = 8;
	// 学习数据最新拉取时间
	uint64 latestPullAt = 9;
}

// AutoSyncGroupInfo 自动同步分组信息
message AutoSyncGroupInfo {
	// 分组ID
	string groupID = 1;
	// 分组名称
	string groupName = 2;
	// 分组信息更新时间
	uint64 groupUpdateAt = 3;
	// 设备列表
	repeated AutoSyncDeviceInfo deviceInfoList = 4;
}

