import random
import itertools

with open('memnite_results.txt', "w") as file:

    lands = list(itertools.permutations([0,1,2,3,4,5,6,7],2))
    for double in [0,1,2,3,4,5,6,7]:
        lands.append((double,double))
    for land_counts in lands:
        for MULLIGAN_DIFF in range(-7,8):

            # MULLIGAN_DIFF = -1 # Draw player mulls - ftp mulls
            FTP_LANDS = land_counts[0]
            DRAW_LANDS = land_counts[1]
            ITERATIONS = 100000

            ftp_wins = 0
            draw_wins = 0

            ## TEMP FOR TESTING MY MATH
            ftp_loss_to_deck = 0
            ftp_loss_to_combat = 0
            draw_loss_to_deck = 0
            draw_loss_to_combat = 0
            ## END TEMP

            for i in range(ITERATIONS):
                ftp_deck = ['memnite'] * 45
                ftp_hand = []
                ftp_field = 0
                ftp_life = 20
                draw_deck = ['memnite'] * 45
                draw_hand = []
                draw_field = 0
                draw_life = 20

                for j in range(FTP_LANDS):
                    ftp_deck.append('land')
                for k in range(DRAW_LANDS):
                    draw_deck.append('land')

                random.shuffle(ftp_deck)
                random.shuffle(draw_deck)

                for x in range(7):
                    ftp_hand.append(ftp_deck.pop())
                    draw_hand.append(draw_deck.pop())


                if MULLIGAN_DIFF > 0:
                    for y in range(MULLIGAN_DIFF):
                        if 'land' in draw_hand:
                            draw_deck.insert(y, 'land')
                            land_index = draw_hand.index('land')
                            draw_hand = draw_hand[:land_index] + draw_hand[land_index+1:]
                        else:
                            draw_deck.insert(y, draw_hand.pop())
                if MULLIGAN_DIFF < 0:
                    for z in range(-MULLIGAN_DIFF):
                        if 'land' in ftp_hand:
                            ftp_deck.insert(z, 'land')
                            land_index = ftp_hand.index('land')
                            ftp_hand = ftp_hand[:land_index] + ftp_hand[land_index+1:]
                        else:
                            ftp_deck.insert(z, ftp_hand.pop())

                draw_hand.append(draw_deck.pop())
                ftp_field = ftp_hand.count('memnite')
                draw_field = draw_hand.count('memnite')

                ## TEMP FOR TESTING MY MATH
                drew_land = 0
                ## END TEMP

                while True:
                    if len(ftp_deck) == 0:
                        ftp_loss_to_deck += 1
                        draw_wins += 1
                        break
                    new_ftp = max(0,ftp_field-draw_field)
                    new_draw = max(0,draw_field-ftp_field)
                    ftp_field = new_ftp
                    draw_field = new_draw
                    if ftp_field > 0:
                        draw_life -= ftp_field
                    if draw_life <= 0:
                        ftp_wins += 1
                        draw_loss_to_combat += 1
                        break
                    if ftp_deck.pop() == 'memnite':
                        ftp_field += 1
                    ## TEMP FOR TESTING MY MATH
                    else:
                        drew_land = len(ftp_deck)
                    ## END TEMP

                    if len(draw_deck) == 0:
                        ftp_wins += 1
                        draw_loss_to_deck += 1
                        break
                    new_ftp = max(0,ftp_field-draw_field)
                    new_draw = max(0,draw_field-ftp_field)
                    ftp_field = new_ftp
                    draw_field = new_draw
                    if draw_field > 0:
                        ftp_life -= draw_field
                    if ftp_life <= 0:
                        draw_wins += 1
                        ## TEMP FOR TESTING MY MATH
                        ftp_loss_to_combat += 1
                        ## END TEMP
                        break
                    if draw_deck.pop() == 'memnite':
                        draw_field += 1

            file.write("with a mulligan diff of " + str(MULLIGAN_DIFF) + '\n')
            file.write("ftp with " + str(FTP_LANDS) + " lands wins " + str(ftp_wins) + "/100000 games\n")
            file.write("draw player with " + str(DRAW_LANDS) + " lands wins " + str(draw_wins) + "/100000 games\n")
            file.write("ftp losses to combat: " + str(ftp_loss_to_combat) + '\n')
            file.write("ftp losses to deck: " + str(ftp_loss_to_deck) + '\n')
            file.write("draw losses to combat: " + str(draw_loss_to_combat) + '\n')
            file.write("draw losses to deck: " + str(draw_loss_to_deck) + '\n')
            file.write("----------------------\n")

    print("All done!")
