package com.narutohuo.xindazhou.ble.config

import java.util.UUID

/**
 * BLE常量定义
 * 
 * 根据新大洲本田蓝牙协议文档定义
 */
object BLEConstants {
    
    // ========== 蓝牙服务UUID ==========
    
    /**
     * 蓝牙指令服务UUID
     */
    val SERVICE_UUID = UUID.fromString("0000adb0-0000-1000-8000-00805f9b34fb")
    
    /**
     * Notify特征值UUID（接收数据）
     */
    val NOTIFY_CHARACTERISTIC_UUID = UUID.fromString("0000adb1-0000-1000-8000-00805f9b34fb")
    
    /**
     * Write特征值UUID（发送数据）
     */
    val WRITE_CHARACTERISTIC_UUID = UUID.fromString("0000adb2-0000-1000-8000-00805f9b34fb")
    
    /**
     * OTA服务UUID
     */
    val OTA_SERVICE_UUID = UUID.fromString("0000adb3-0000-1000-8000-00805f9b34fb")
    
    /**
     * OTA Notify特征值UUID
     */
    val OTA_NOTIFY_CHARACTERISTIC_UUID = UUID.fromString("0000adb4-0000-1000-8000-00805f9b34fb")
    
    /**
     * OTA Write特征值UUID
     */
    val OTA_WRITE_CHARACTERISTIC_UUID = UUID.fromString("0000adb5-0000-1000-8000-00805f9b34fb")
    
    // ========== 数据包结构常量 ==========
    
    /**
     * 包头（固定值）
     */
    const val PACKET_HEAD = 0x0A.toByte()
    
    /**
     * 包尾（固定值）
     */
    const val PACKET_TAIL = 0x0D.toByte()
    
    /**
     * APP地址
     */
    const val ADDRESS_APP = 0x0F.toByte()
    
    /**
     * 中控地址
     */
    const val ADDRESS_CONTROLLER = 0x05.toByte()
    
    /**
     * 仪表地址
     */
    const val ADDRESS_DASHBOARD = 0x0A.toByte()
    
    /**
     * 协议版本（v1.0）
     */
    const val PROTOCOL_VERSION = 0x01.toByte()
    
    /**
     * Android操作系统标识
     */
    const val OS_ANDROID = 0x01.toByte()
    
    /**
     * iOS操作系统标识
     */
    const val OS_IOS = 0x02.toByte()
    
    /**
     * 加密标志：不加密
     */
    const val ENCRYPT_FLAG_NONE = 0x00.toByte()
    
    /**
     * 加密标志：加密
     */
    const val ENCRYPT_FLAG_ENCRYPTED = 0x01.toByte()
    
    // ========== 功能码 ==========
    
    /**
     * 功能码：握手
     */
    const val FUNCTION_CODE_HANDSHAKE = 0x01.toByte()
    
    /**
     * 功能码：应用控制
     */
    const val FUNCTION_CODE_APP_CONTROL = 0x02.toByte()
    
    /**
     * 功能码：系统控制
     */
    const val FUNCTION_CODE_SYSTEM_CONTROL = 0x03.toByte()
    
    /**
     * 功能码：系统查询
     */
    const val FUNCTION_CODE_SYSTEM_QUERY = 0x04.toByte()
    
    /**
     * 功能码：系统设置
     */
    const val FUNCTION_CODE_SYSTEM_SETTING = 0x05.toByte()
    
    /**
     * 功能码：MTU查询
     */
    const val FUNCTION_CODE_MTU_QUERY = 0x06.toByte()
    
    // ========== 用户类型 ==========
    
    /**
     * 用户类型：最高权限
     */
    const val USER_TYPE_HIGHEST = 0x01.toByte()
    
    /**
     * 用户类型：车主
     */
    const val USER_TYPE_OWNER = 0x02.toByte()
    
    /**
     * 用户类型：分享用户
     */
    const val USER_TYPE_SHARED = 0x03.toByte()
    
    // ========== 加密相关 ==========
    
    /**
     * AES密钥前缀
     */
    const val AES_KEY_PREFIX = "2025SDH+"
    
    /**
     * AES密钥长度（16字节）
     */
    const val AES_KEY_LENGTH = 16
    
    /**
     * AES加密算法
     */
    const val AES_ALGORITHM = "AES/ECB/PKCS7Padding"
    
    // ========== 超时时间 ==========
    
    /**
     * 默认超时时间（毫秒）
     */
    const val DEFAULT_TIMEOUT_MS = 2000L
    
    /**
     * 握手超时时间（毫秒）
     */
    const val HANDSHAKE_TIMEOUT_MS = 3000L
    
    // ========== 连接策略 ==========
    
    /**
     * 连接成功后握手超时时间（秒）
     */
    const val HANDSHAKE_TIMEOUT_SECONDS = 3
    
    // ========== 设备过滤配置 ==========
    
    /**
     * 目标设备名称（用于扫描过滤，可选）
     * 如果为 null，则不按名称过滤
     * 默认值："SDH-Smart"（参考 demo）
     */
    val TARGET_DEVICE_NAME: String? = "SDH-Smart"
    
    /**
     * 目标设备地址（用于扫描过滤，可选）
     * 如果为 null，则不按地址过滤
     * 格式：XX:XX:XX:XX:XX:XX（不区分大小写）
     * 默认值："C0:D4:32:83:61:3A"（参考 demo）
     */
    val TARGET_DEVICE_ADDRESS: String? = "C0:D4:32:83:61:3A"
}

