def commandIC(commands, game):
    if not bg.has_match(game):
        print("Não existe jogo em curso.")
    elif not bg.all_ships_placed(game):
        print("Navios não colocados.")
    else:
        if not bg.has_combat(game):
            bg.start_combat(game)
        print("Combate iniciado.")
def commandD(commands, game):
    player_1_name = commands[1]
    player_2_name = commands[2] if len(commands) == 3 else None
    if not bg.has_match(game):
        print("Não existe jogo em curso.")
    elif (not bg.in_match(game, player_1_name)) or (
        (not bg.in_match(game, player_2_name)) and player_2_name is not None):
        print("Jogador não participa no jogo em curso.")
    else:
        bg.withdraw(game, player_1_name, player_2_name)
        print("Desistência com sucesso. Jogo terminado.")
def commandV(commands, game):
    if not bg.has_match(game):
        print("Não existe jogo em curso.")
    elif not bg.has_combat(game):
        print("Jogo em curso sem combate iniciado.")
    else:
        result = bg.get_match_state(game)
        for e in result:
            print(
                f"{e['name']} {e['total_shots']} {e['shots_on_ships']} {e['sunk_ships']}"
            )
def commandRN(commands, game):
    player_name = commands[1]
    line = commands[2]
    column = commands[3]
    if not bg.has_match(game):
        print("Não existe jogo em curso.")
    elif not bg.in_match(game, player_name):
        print("Jogador não participa no jogo em curso.")
    elif not bg.is_ship_in_position(game, player_name, line, column):
        print("Não existe navio na posição.")
    else:
        bg.remove_ship(game, player_name, line, column)
        print("Navio removido com sucesso.")
def commandIJ(commands, game):
    player_1_name = commands[1]
    player_2_name = commands[2]
    if bg.has_match(game):
        print("Existe um jogo em curso.")
    elif (not bg.has_player(game, player_1_name)) or (not bg.has_player(
            game, player_2_name)):
        print("Jogadores não registados.")
    else:
        bg.start_match(game, player_1_name, player_2_name)
        names = bg.__sort([{
            'name': player_1_name
        }, {
            'name': player_2_name
        }], ['name'])
        print(f"Jogo iniciado entre {names[0]['name']} e {names[1]['name']}.")
def commandCN(commands, game):
    player_name = commands[1]
    ship_type = commands[2]
    line = commands[3]
    column = commands[4]
    orientation = commands[5] if len(commands) == 6 else None
    if not bg.has_match(game):
        print("Não existe jogo em curso.")
    elif not bg.in_match(game, player_name):
        print("Jogador não participa no jogo em curso.")
    elif not bg.is_valid_position(game, player_name, ship_type, line, column,
                                  orientation):
        print("Posição irregular.")
    elif not bg.is_ship_type_available(game, player_name, ship_type):
        print("Não tem mais navios dessa tipologia disponíveis.")
    else:
        bg.place_ship(game, player_name, ship_type, line, column, orientation)
        print("Navio colocado com sucesso.")
def commandT(commands, game):
    player_name = commands[1]
    line = commands[2]
    column = commands[3]
    if not bg.has_match(game):
        print("Não existe jogo em curso.")
    elif not bg.has_combat(game):
        print("Jogo em curso sem combate iniciado.")
    elif not bg.in_match(game, player_name):
        print("Jogador não participa no jogo em curso.")
    elif not bg.is_valid_shot(game, line, column):
        print("Posição irregular.")
    else:
        shot = bg.shot(game, player_name, line, column)
        if shot['ended']:
            print(f"Navio {shot['ship']['name']} afundado. Jogo terminado.")
        elif shot['sunk']:
            print(f"Navio {shot['ship']['name']} afundado.")
        elif shot['ship'] is not None:
            print("Tiro em navio.")
        else:
            print("Tiro na água.")
 def test_start_match(self):
     self.assertFalse(bg.has_match(self.game))
     self.__add_players()
     bg.start_match(self.game, "Alice", "Trudy")
     self.assertTrue(bg.has_match(self.game))
 def test_has_match(self):
     self.assertFalse(bg.has_match(self.game))
     self.__add_players_and_set_match()
     self.assertTrue(bg.has_match(self.game))