import requests
import pickle
import time

class MBgame:
    def __init__(self, game_id, title, screenshot, description, moby_url, first_release_date):
        self.game_id = game_id
        self.title = title
        self.screenshot = screenshot
        self.description = description
        self.moby_url = moby_url
        self.first_release_date = first_release_date

def buscarScreenShot(id, apiKey):
    url = "https://api.mobygames.com/v1/games/"+str(id)+"/platforms/2/screenshots?api_key="+apiKey
    url=url.strip()
    gameScreenshot = requests.get(url)
    jsonScreenshot = gameScreenshot.json()
    for screen in jsonScreenshot['screenshots']:
        screenShot = screen['image']
        break
    time.sleep(10)
    return screenShot

def crearFicheroJuegos(apiKey):

    DOSgames  = []
    continuar = True
    counter = 0

    while(continuar):
        time.sleep(1)
        url = "https://api.mobygames.com/v1/games?platform=2&api_key="+apiKey+"&limit=100&offset="

        gameText = requests.get(url+str(counter))
        if counter > 8300:
            continuar = False
        jsonText = gameText.json()


        for game in jsonText['games']:
            first_release_date = 0
            game_id = game['game_id']
            screenshot = buscarScreenShot(game['game_id'])
            title = game['title']
            description = game['description']
            moby_url = game['moby_url']
            for platform in game['platforms']:
                if platform['platform_name']=="DOS":
                    first_release_date = platform['first_release_date']
            gameAux = MBgame(game_id, title, screenshot, description, moby_url, first_release_date)
            DOSgames.append(gameAux)
            print(gameAux.title)

        counter += 100

    with open("games.pickle","wb") as fichero:
        for game in DOSgames:
            pickle.dump(game, fichero)

def actualizarJuegosConScreenshot(apiKey):

    #Leemos los juegos desde el fichero
    listaJuegos = []
    with open("games.pickle","rb") as fichero:
        try:
            while True:
                listaJuegos.append(pickle.load(fichero))
        except EOFError:
            pass
    #por cada juego pedimos una screenshot a MobyGames
    for game in listaJuegos:
        print(game.title)
        game.screenshot = buscarScreenShot(game.game_id, apiKey)

    #Guardamos otra vez los juegos actualizados en un segundo fichero
    with open("games2.pickle","wb") as fichero:
        for game in listaJuegos:
            pickle.dump(game, fichero)

opcion = 0
# cogemos el valor de la key de API:
fichero = open("data.ini", "r")
apiKey = fichero.readline().split("=")[1]
while(opcion!="3"):
    # MENU
    print("*******************************")
    print("**Get MobyGames data from web**")
    print("*******************************")
    print("Escoge opcion:")
    print("1.- Descargar todos los juegos de DOS a fichero.")
    print("2.- Actualizar fichero de juegos con un screenshot.")
    print("3.- Salir.")
    opcion = input("opción? ")

    if(opcion=="1"):
        crearFicheroJuegos(apiKey)
    elif(opcion=="2"):
        actualizarJuegosConScreenshot(apiKey)
    elif(opcion=="3"):
        pass
    else:
        print("Opción incorrecta.")
