package ctr

// Client Ctr 客户端接口（Service 层调用）
//
// 职责：
// 1. 定义 Service 层可调用的所有方法
// 2. 解耦 Service 和 Ctr 实现
// 3. 便于单元测试 Mock
//
// 使用示例：
//
//	type NetworkService struct {
//	    ctrClient ctr.Client
//	}
//
//	func (s *NetworkService) CreateNetwork(req *model.Network) error {
//	    return s.ctrClient.CreateNetwork(req.ID, req.Subnet, listenPort)
//	}
type Client interface {
	// ========== 网络生命周期管理 ==========

	// CreateNetwork 创建网络
	// networkID: 组网 ID（雪花算法 uint64）
	// subnet: 子网段（例如："10.0.0.0/24"）
	// listenPort: WireGuard 监听端口（例如：51820 + hash(networkID)）
	// meshMode: 组网模式（"native" | "enhanced"）
	CreateNetwork(networkID uint64, subnet string, listenPort int, meshMode string) error

	// DeleteNetwork 删除网络
	DeleteNetwork(networkID uint64) error

	// ========== Peer 管理 ==========

	// AddPeer 添加 Peer
	// publicKey: Peer 的公钥
	// allowedIP: Peer 的允许 IP（例如："10.0.0.2/32"）
	AddPeer(networkID uint64, publicKey, allowedIP string) error

	// RemovePeer 移除 Peer
	RemovePeer(networkID uint64, publicKey string) error

	// ========== 状态查询 ==========

	// GetStatus 获取网络状态
	// 返回 WGStatus 和 CoreStatus（如果 Core 存在）
	GetStatus(networkID uint64) (*NetworkStatus, error)

	// ========== 模式切换（P3 阶段） ==========

	// SwitchMode 切换传输模式（原生→增强）
	// mode: "native" | "enhanced"
	// ✅ P3-1 阶段实现
	SwitchMode(networkID uint64, mode string) error

	// ========== 配置同步（P3 阶段） ==========

	// UpdateCoreConfig 更新 Core 配置（策略修改后同步）
	// config: 新的配置对象（根据策略类型决定）
	// ✅ P3-1 阶段实现
	UpdateCoreConfig(networkID uint64, config interface{}) error
}

// 确保 Ctr 实现了 Client 接口
var _ Client = (*Ctr)(nil)
