# AGPLv3 or later

import json
import zlib
import random

import handler


players = {}

def RandomString(size=16):

    # This will generate random strings, primarily
    # for the purpose of recognizing the same objects
    # on the network.

    good = "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"

    text = ""
    for i in range(size):
        text = text + random.choice(good)

    return text

def run(a, data):

    resp = {}

    # Generating new ID for new player
    ID = stripID(a)
    if ID not in players:
        new_id(resp, ID)

    if "players" in data:
        list_players(resp)

    if "username" in data:
        set_username(resp, data.get("username"), ID)

    return resp

def stripID(a):
    return a[0]+":"+str(a[1])

    
def new_id(resp, ID):

    player = {"username":safe_username("Player")}
    players[ID] = player

    resp["id"] = ID

def safe_username(name):

    count = 0
    for ID in players:
        player = players[ID]
        if player.get("username", "").startswith(name):
            count += 1
    if not count:
        return name
    else:
        return name + "_" + str(count+1)

def set_username(resp, name, ID):

    if name:
        name = safe_username(name)
        players[ID]["username"] = name
        resp["username"] = name
    else:
        resp["username"] = players[ID]["username"]
    
def list_players(resp):

    p = []
    
    for ID in players:
        player = players[ID]
        p.append(player.get("username", "Player_Unknown"))
    resp["players"] = p