syntax = "proto2";
import "game_commands.proto";

// Container describing a single card to move
message CardToMove {
    // Id of the card in its current zone
    optional sint32 card_id = 1 [default = -1];

    // If true, places the card face down, hiding its name.
    // If false, forcibly turns the card face up.
    // If not set, defers the resulting face down state to the server.
    optional bool face_down = 2;

    // When moving add this value to the power/toughness field of the card
    optional string pt = 3;

    // When moving sets the card to be tapped
    optional bool tapped = 4;
}

// Container of multiple cards to move
message ListOfCardsToMove {
    repeated CardToMove card = 1;
}

// Command to move an amount of cards from one zone to another index/coordinate or another zone
message Command_MoveCard {
    extend GameCommand {
        optional Command_MoveCard ext = 1027;
    }

    // The player the zone the cards are in belongs to
    optional sint32 start_player_id = 1 [default = -1];

    // The zone the cards start in
    optional string start_zone = 2;

    // List of the cards and their new properties
    optional ListOfCardsToMove cards_to_move = 3;

    // The player the zone the cards will be moved to belongs to
    optional sint32 target_player_id = 4 [default = -1];

    // The zone the cards will be moved to
    optional string target_zone = 5;

    // New x coordinate of the first card in the list
    optional sint32 x = 6 [default = -1];

    // New y coordinate of the first card in the list
    optional sint32 y = 7 [default = -1];

    // Inverts the x coordinate to apply from the end of the target zone instead of the start
    optional bool is_reversed = 8 [default = false];
}
