from app_instance import api

from wiz_game import the_game


@api.route("/control/")
def index(req, resp):
    round_finished = the_game.is_round_finished()
    trick_finished = the_game.is_trick_finished()

    if round_finished:
        trick_winner, highest_card = the_game.get_trick_winner()
        winner = trick_winner.name
        resp.content = api.template('home/control.html', deck=the_game.card_deck,
                                    trump_card=the_game.trump_card, trump_color=the_game.get_trump_color(),
                                    round_finished=True, trick_finished=False, trick_winner=winner,
                                    highest_card=highest_card
                                    )
    elif trick_finished:
        trick_winner, highest_card = the_game.get_trick_winner()
        winner = trick_winner.name
        resp.content = api.template('home/control.html', deck=the_game.card_deck,
                                    trump_card=the_game.trump_card, trump_color=the_game.get_trump_color(),
                                    round_finished=False, trick_finished=True, trick_winner=winner,
                                    highest_card=highest_card
                                    )
    else:
        resp.content = api.template('home/control.html', deck=the_game.card_deck,
                                    trump_card=the_game.trump_card, trump_color=the_game.get_trump_color(),
                                    round_finished=False, trick_finished=False
                                    )

@api.route("/control/next_round/")
async def start_next_round(req, resp):
    the_game.next_round()
    await the_game.send_page_reload()
    api.redirect(resp, '/control/', status_code=303)


@api.route("/control/next_trick/")
async def start_next_trick(req, resp):
    the_game.next_trick()
    await the_game.send_page_reload()
    api.redirect(resp, '/control/', status_code=303)


@api.route("/control/undo_last/")
async def undo_last(req, resp):
    round_finished = the_game.is_round_finished()
    if the_game.played_cards:
        if not round_finished:
            p, c = the_game.played_cards.pop()
            the_game.active_player -= 1
            p.add_card(c)
            await the_game.send_page_reload()
    else:
        if the_game.num_tricks_played > 0:
            the_game.num_tricks_played -= 1;
            the_game.played_cards = the_game.last_trick;
            the_game.active_player = len(the_game.players) - 1
            player, _ = the_game.get_trick_winner()
            player.tricks_taken -= 1
            the_game.players_ordered = [p for p, _ in the_game.played_cards]
            p, c = the_game.played_cards.pop()
            p.add_card(c)
            await the_game.send_page_reload()

    api.redirect(resp, '/control/', status_code=303)

