syntax = "proto3";
option go_package = "./pb";

package pb;

import "models/rpc_messages.proto";
import "models/model_ip_item.proto";

// IP条目管理
service IPItemService {
	// 创建IP
	rpc createIPItem (CreateIPItemRequest) returns (CreateIPItemResponse);

	// 修改IP
	rpc updateIPItem (UpdateIPItemRequest) returns (RPCSuccess);

	// 删除IP
	rpc deleteIPItem (DeleteIPItemRequest) returns (RPCSuccess);

	// 计算IP数量
	rpc countIPItemsWithListId (CountIPItemsWithListIdRequest) returns (RPCCountResponse);

	// 列出单页的IP
	rpc listIPItemsWithListId (ListIPItemsWithListIdRequest) returns (ListIPItemsWithListIdResponse);

	// 查找单个IP
	rpc findEnabledIPItem (FindEnabledIPItemRequest) returns (FindEnabledIPItemResponse);

	// 根据版本列出一组IP
	rpc listIPItemsAfterVersion (ListIPItemsAfterVersionRequest) returns (ListIPItemsAfterVersionResponse);

	// 检查IP状态
	rpc checkIPItemStatus (CheckIPItemStatusRequest) returns (CheckIPItemStatusResponse);

	// 检查IP是否存在
	rpc existsEnabledIPItem (ExistsEnabledIPItemRequest) returns (ExistsEnabledIPItemResponse);
}

// 创建IP
message CreateIPItemRequest {
	int64 ipListId = 1; // IP列表ID
	string ipFrom = 2; // 开始IP
	string ipTo = 3; // 结束IP（可选）
	int64 expiredAt = 4; // 过期时间戳（可选）
	string reason = 5; // 加入理由（可选）
	string type = 6; // 类型
	string eventLevel = 7; // 级别
}

message CreateIPItemResponse {
	int64 ipItemId = 1;
}

// 修改IP
message UpdateIPItemRequest {
	int64 ipItemId = 1;
	string ipFrom = 2;
	string ipTo = 3;
	int64 expiredAt = 4;
	string reason = 5;
	string type = 6; // 类型
	string eventLevel = 7; // 级别
}

// 删除IP
message DeleteIPItemRequest {
	int64 ipItemId = 1; // IP条目的ID
}

// 计算IP数量
message CountIPItemsWithListIdRequest {
	int64 ipListId = 1;
	string keyword = 2;
	string ipFrom = 3;
	string ipTo = 4;
}

// 列出单页的IP
message ListIPItemsWithListIdRequest {
	int64 ipListId = 1;
	string keyword = 4;
	string ipFrom = 5;
	string ipTo = 6;
	int64 offset = 2;
	int64 size = 3;
}

message ListIPItemsWithListIdResponse {
	repeated IPItem ipItems = 1;
}

// 查找单个IP
message FindEnabledIPItemRequest {
	int64 ipItemId = 1;
}

message FindEnabledIPItemResponse {
	IPItem ipItem = 1;
}

// 根据版本列出一组IP
message ListIPItemsAfterVersionRequest {
	int64 version = 1;
	int64 size = 2;
}

message ListIPItemsAfterVersionResponse {
	repeated IPItem ipItems = 1;
}

// 检查IP状态
message CheckIPItemStatusRequest {
	int64 ipListId = 1;
	string ip = 2;
}

message CheckIPItemStatusResponse {
	bool isOk = 1; // 是否查询成功
	string error = 2;
	bool isFound = 3; // 是否找到
	bool isAllowed = 4; // 是否允许
	IPItem ipItem = 5; // 匹配的IPItem
}

// 检查IP是否存在
message ExistsEnabledIPItemRequest {
	int64 ipItemId = 1;
}

message ExistsEnabledIPItemResponse {
	bool exists = 1;
}