package dfproto;

option optimize_for = LITE_RUNTIME;

import "Basic.proto";

// RPC GetVersion : EmptyMessage -> StringMessage
// RPC GetDFVersion : EmptyMessage -> StringMessage

// RPC GetWorldInfo : EmptyMessage -> GetWorldInfoOut
message GetWorldInfoOut {
    enum Mode {
        MODE_DWARF = 1;
        MODE_ADVENTURE = 2;
        MODE_LEGENDS = 3;
    };
    required Mode mode = 1;

    required string save_dir = 2;
    optional NameInfo world_name = 3;

    // Dwarf mode
    optional int32 civ_id = 4;
    optional int32 site_id = 5;
    optional int32 group_id = 6;
    optional int32 race_id = 7;

    // Adventure mode
    optional int32 player_unit_id = 8;
    optional int32 player_histfig_id = 9;
    repeated int32 companion_histfig_ids = 10;
};

// RPC ListEnums : EmptyMessage -> ListEnumsOut
message ListEnumsOut {
    repeated EnumItemName material_flags = 1;
    repeated EnumItemName inorganic_flags = 2;

    repeated EnumItemName unit_flags1 = 3;
    repeated EnumItemName unit_flags2 = 4;
    repeated EnumItemName unit_flags3 = 5;

    repeated EnumItemName unit_labor = 6;
    repeated EnumItemName job_skill = 7;

    repeated EnumItemName cie_add_tag_mask1 = 8;
    repeated EnumItemName cie_add_tag_mask2 = 9;

    repeated EnumItemName death_info_flags = 10;

    repeated EnumItemName profession = 11;
};

// RPC ListJobSkills : EmptyMessage -> ListJobSkillsOut
message ListJobSkillsOut {
    repeated JobSkillAttr skill = 1;
    repeated ProfessionAttr profession = 2;
    repeated UnitLaborAttr labor = 3;
};

// RPC ListMaterials : ListMaterialsIn -> ListMaterialsOut
message ListMaterialsIn {
    optional BasicMaterialInfoMask mask = 1;

    // Specific materials:
    repeated BasicMaterialId id_list = 2;

    // Complete list by type:
    optional bool builtin = 3;
    optional bool inorganic = 4;
    optional bool creatures = 5;
    optional bool plants = 6;
};
message ListMaterialsOut {
    repeated BasicMaterialInfo value = 1;
};

// RPC ListUnits : ListUnitsIn -> ListUnitsOut
message ListUnitsIn {
    optional BasicUnitInfoMask mask = 1;

    // Specific units:
    repeated int32 id_list = 2;

    // All units matching:
    optional bool scan_all = 5;

    optional int32 race = 3;
    optional int32 civ_id = 4;
    optional bool dead = 6; // i.e. passive corpse
    optional bool alive = 7; // i.e. not dead or undead
    optional bool sane = 8; // not dead, ghost, zombie, or insane
};
message ListUnitsOut {
    repeated BasicUnitInfo value = 1;
};

// RPC ListSquads : ListSquadsIn -> ListSquadsOut
message ListSquadsIn {}
message ListSquadsOut {
    repeated BasicSquadInfo value = 1;
};

// RPC SetUnitLabors : SetUnitLaborsIn -> EmptyMessage
message SetUnitLaborsIn {
    repeated UnitLaborState change = 1;
};
