package wg

import (
	"encoding/binary"
	"fmt"
)

// WGPlugin WireGuard 协议插件实现
type WGPlugin struct{}

// NewWGPlugin 创建 WireGuard 协议插件
func NewWGPlugin() *WGPlugin {
	return &WGPlugin{}
}

// IsControlPacket 判断是否为控制包
// WG 控制包类型：1 (Initiation), 2 (Response), 3 (CookieReply)
func (p *WGPlugin) IsControlPacket(packet []byte) bool {
	if len(packet) < 1 {
		return false
	}

	packetType := packet[0]
	return packetType == 1 || packetType == 2 || packetType == 3
}

// IsDataPacket 判断是否为数据包
// WG 数据包类型：4
func (p *WGPlugin) IsDataPacket(packet []byte) bool {
	if len(packet) < 1 {
		return false
	}

	return packet[0] == 4
}

// ExtractRouteID 从数据包中提取路由标识（WG receiver index）
// WG 数据包格式：[类型 (1 字节)][保留 (3 字节)][receiver index (4 字节)]...
func (p *WGPlugin) ExtractRouteID(packet []byte) (uint32, error) {
	if len(packet) < 8 {
		return 0, fmt.Errorf("数据包过短：%d", len(packet))
	}

	// 读取 packet[4:8]，网络字节序解析为 uint32
	routeID := binary.BigEndian.Uint32(packet[4:8])
	return routeID, nil
}
