syntax = "proto3";

import "xresloader.proto";
import "xresloader_ue.proto";

import "dependency.proto";
import "dep_level2.proto";

import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";

message role_cfg {
    uint32  id           = 1;
    uint32  unlock_level = 2;
    int32   cost_type    = 3;
    int32   cost_value   = 4;
    string  name         = 5;
    dep_cfg dep_test     = 10;

    repeated string    test_array            = 11;
    string             int_as_string         = 12;
    repeated cost_type test_plain_enum_array = 13;

    google.protobuf.Timestamp convert_timepoint_one          = 21 [ (org.xresloader.field_origin_value) = "origin_timepoint_one" ];
    string                    origin_timepoint_one           = 22;
    google.protobuf.Duration  convert_duration_one           = 23 [ (org.xresloader.field_origin_value) = "origin_duration_one" ];
    string                    origin_duration_one            = 24;
    repeated google.protobuf.Timestamp convert_timepoint_arr = 25 [ (org.xresloader.field_origin_value) = "origin_timepoint_arr" ];
    repeated string                    origin_timepoint_arr  = 26;
    repeated google.protobuf.Duration convert_duration_arr   = 27 [ (org.xresloader.field_origin_value) = "origin_duration_arr" ];
    repeated string                   origin_duration_arr    = 28;
}

message role_upgrade_cfg {
    option (org.xresloader.ue.helper)       = "helper";
    option (org.xresloader.msg_description) = "Test role_upgrade_cfg with multi keys";

    uint32 Id        = 1 [ (org.xresloader.ue.key_tag) = 1000, (org.xresloader.validator) = "custom_rule3" ];
    uint32 Level     = 2 [ (org.xresloader.ue.key_tag) = 1 ];
    int32  CostType  = 3 [ (org.xresloader.validator) = "custom_rule1", (org.xresloader.field_description) = "Refer to cost_type" ];
    int64  CostValue = 4;
    int32  ScoreAdd  = 5;
}

message arr_in_arr {
    option (org.xresloader.ue.helper)         = "helper";
    option (org.xresloader.ue.not_data_table) = true;
    option (org.xresloader.ue.include_header) = "Engine/CompositeDataTable.h";

    string          name    = 1 [ (org.xresloader.field_description) = "This is a test name in array" ];
    repeated int32  int_arr = 2 [ (org.xresloader.field_list_min_size) = "game_const_config.EN_GCC_UNKNOWN", (org.xresloader.field_list_max_size) = "3", (org.xresloader.field_list_strip_option) = LIST_STRIP_NOTHING ];
    repeated string str_arr = 3;

    oneof test_onof {
        role_cfg         test_info_role        = 11;
        role_upgrade_cfg test_role_upgrade_cfg = 12;
    }

    enum test_nested_enum {
        EN_TEST_NESTED_ENUM_VAL_1 = 0;
        EN_TEST_NESTED_ENUM_VAL_2 = 123;
    }

    message test_nested_message {
        oneof test_onof {
            role_cfg         test_nested_message_info_role        = 11;
            role_upgrade_cfg test_nested_message_role_upgrade_cfg = 12;
        }

        enum test_nested_enum {
            EN_TEST_NESTED_MESSAGE_ENUM_VAL_1 = 0;
            EN_TEST_NESTED_MESSAGE_ENUM_VAL_2 = 123;
        }
    }
}

message test_msg_verifier {
    option (org.xresloader.msg_separator) = "-^";

    uint32 test_id_1 = 10001;
    uint32 test_id_2 = 10002 [ (org.xresloader.field_alias) = "测试ID别名2", (org.xresloader.field_tag) = "server_only" ];
    uint32 test_id_3 = 10003 [ (org.xresloader.field_allow_missing_in_plain_mode) = true ];
}

message arr_in_arr_cfg {
    option (org.xresloader.ue.helper)       = "helper";
    option (org.xresloader.msg_description) = "Test arr_in_arr_cfg";

    uint32              id  = 1 [ (org.xresloader.ue.key_tag) = 1, (org.xresloader.field_description) = "This is a Key" ];
    repeated arr_in_arr arr = 2 [ (org.xresloader.field_tag) = "server_only" ];

    repeated int32             test_plain_int_arr  = 3 [ (org.xresloader.field_list_min_size) = "1", (org.xresloader.field_list_max_size) = "3", (org.xresloader.field_tag) = "server_only" ];
    repeated cost_type         test_plain_enum_arr = 4;
    test_msg_verifier          test_plain_msg      = 5 [ (org.xresloader.field_separator) = "&" ];
    repeated test_msg_verifier test_plain_msg_arr  = 6;

    map<int32, string>    test_map_is = 7;
    map<string, dep2_cfg> test_map_sm = 8 [ (org.xresloader.field_separator) = "|" ];
}

message event_reward_item {
    uint32 item_id    = 1;
    uint32 item_count = 2;

    oneof nested {
        string    nested_note      = 11 [ (org.xresloader.field_alias) = "描述文本" ];
        cost_type nested_enum_type = 12 [ (org.xresloader.field_alias) = "货币类型" ];
    }
}

message event_rule_item {
    uint32 rule_id    = 1;
    uint32 rule_param = 2;

    oneof nested {
        string    nested_note      = 11 [ (org.xresloader.field_alias) = "描述文本" ];
        cost_type nested_enum_type = 12 [ (org.xresloader.field_alias) = "货币类型" ];
    }
}

message event_cfg {
    option (org.xresloader.ue.helper)       = "helper";
    option (org.xresloader.msg_description) = "Test event_cfg with oneof fields";

    uint32 id      = 1 [ (org.xresloader.ue.key_tag) = 100, (org.xresloader.field_not_null) = true, (org.xresloader.field_unique_tag) = "unique_tag", (org.xresloader.validator) = "custom_rule4" ];
    uint32 process = 2 [ (org.xresloader.ue.key_tag) = 1, (org.xresloader.field_not_null) = true, (org.xresloader.field_unique_tag) = "unique_tag" ];

    event_rule_item rule          = 6;
    event_rule_item specify_field = 7 [ (org.xresloader.field_tag) = "server_only" ];

    oneof reward {
        option (org.xresloader.oneof_not_null) = true;
        option (org.xresloader.oneof_tag)      = "server_only";

        event_reward_item item      = 11 [ (org.xresloader.field_alias) = "奖励道具" ];
        int64             user_exp  = 12 [ (org.xresloader.field_alias) = "奖励经验" ];
        string            note      = 13 [ (org.xresloader.field_alias) = "描述文本" ];
        cost_type         enum_type = 14 [ (org.xresloader.field_alias) = "货币类型" ];
    }

    oneof unlock_type { uint32 user_level = 51 [ (org.xresloader.field_alias) = "玩家等级" ]; }

    repeated event_rule_item test_arr       = 91 [ (org.xresloader.field_separator) = ";" ];
    repeated event_rule_item test_empty_arr = 92 [ (org.xresloader.field_separator) = ";" ];
}

message keep_or_strip_empty_list_cfg {
    option (org.xresloader.ue.helper) = "helper";

    uint32            id              = 1 [ (org.xresloader.ue.key_tag) = 1, (org.xresloader.field_description) = "This is a Key" ];
    repeated dep2_cfg array_msg       = 2;
    repeated dep2_cfg array_plain_msg = 3;
    repeated int32    array_int32     = 4;
    repeated int64    array_int64     = 5;
}

message combine_id {
    uint32 prefix = 1;
    uint32 id     = 2 [ (org.xresloader.validator) = "0-99999" ];
}

message process_by_script {
    uint32              id             = 1;
    map<uint32, string> map_u32_string = 2;

    string                    human_readable_date = 3;
    google.protobuf.Timestamp date                = 4;

    map<int32, string>    test_map_is = 7;
    map<string, dep2_cfg> test_map_sm = 8 [ (org.xresloader.field_separator) = "|" ];

    combine_id id_id = 1001;
}

message large_file_test {
    uint32     id       = 1;
    int32      i32value = 2;
    uint64     u64value = 3;
    double     f64value = 4;
    float      f32value = 5;
    string     szvalue  = 6;
    combine_id id_id    = 7;
}

message inner_alias_message {
    int32          iType     = 1 [ (org.xresloader.field_alias) = "Type" ];
    repeated int64 paramList = 2 [ (org.xresloader.field_alias) = "Param", (org.xresloader.field_list_min_size) = "2" ];
}

message outer_alias_message {
    int32                        iId      = 1 [ (org.xresloader.field_alias) = "ID" ];
    repeated inner_alias_message inners   = 2 [ (org.xresloader.field_alias) = "Condition" ];
    repeated int32               nest_int = 3 [ (org.xresloader.field_alias) = "Nest", (org.xresloader.field_list_min_size) = "2" ];
}