def defend_commit(request, game_id, player_no, tile_count):
    g = Game.objects.get(id=int(game_id))
    if not g.state.startswith("DEFEND"):
        return False

    board = StandardBoard(g, 1)
    build_board_data(board)
    p = g.__getattribute__("player_" + player_no)
    hand = Hand.objects.filter(player=p, turn_no=1, game=g).get()

    civ = g.state.split("|")[1]

    if not int(player_no) == g.waiting_for:
        return False
    if not hand.batch_remove(civ, tile_count):
        return False

    hand.save()

    defend_info = _get_defend_info(g, board)

    losing_kindom = None
    if len(defend_info["attack_board"]) + int(defend_info["attack_committed"]) > len(defend_info["defend_board"]) + int(
        tile_count
    ):
        losing_kingdom = _get_defender_kingdom(g, board)
        winner_no = _get_attacker(g, board)
    else:
        losing_kingdom = _get_attacker_kingdom(g, board)
        winner_no = player_no

    points = board.external_war_removal(losing_kingdom, civ)
    _give_points(game=g, player_no=winner_no, count=points, type=civ)

    build_board_data(board)

    unification_cell_no = board.find_unification_tile()
    more_war = external_war_tile(board, unification_cell_no)
    if more_war:
        g.state = "CHOOSE_COLOR"
        g.waiting_for = g.current_turn
    else:
        board[unification_cell_no].piece = _convert(board[unification_cell_no].special.piece)
        board[unification_cell_no].special = None
        build_board_data(board)

        treasure = board.treasure_to_claim()
        if treasure:
            g.waiting_for = treasure["player_no"]
            g.state = "TREASURE"
        else:
            g.state = "REGULAR"
            g.increment_action()

    g.save()
    board.save()

    update_browsers(game_id)

    return game_state_json(request, game_id, player_no)
    def test_external_war_removal(self):
        board = StandardBoard(self.game)
        board.rows = 4
        board.columns = 4
        board._parse_state('t|G?|r1t|s|r2t|G|t|t|G|t|r2s|t|G|r2f|s|s')

        build_board_data(board)
        count = board.external_war_removal(1,'temple')

        self.assertEquals(count, 2)
        self.assertEquals(board._db_form(), 't|G?|G|s|r2t|G|t|G|G|t|r2s|t|G|r2f|s|s')

        board._parse_state('t|G?|r1t|s|r2t|G|t|t|G|t|r2s|t|G|r2f|s|s')
        build_board_data(board)
        count = board.external_war_removal(2,'temple')

        self.assertEquals(count, 2)        
        self.assertEquals(board._db_form(), 'G|G?|r1t|s|G|G|t|t|G|t|r2s|t|G|r2f|s|s')