import sys
import a2s
import math
import json
from a2s import dayzquery
sys.path.append('a2s')

def test_local(ip, qport):
    try:
        info = a2s.info((ip, int(qport)), 0.5)
        name = info.server_name
        print(name)
    except:
        sys.exit(1)

def get_info(ip, qport):
    try:
        info = a2s.info((ip, int(qport)))

        name = info.server_name
        map = info.map_name
        address = ip + ":" + qport
        gameport = str(info.port)
        players = info.player_count
        max_players = info.max_players
        keywords = info.keywords
        ping = (info.ping*1000)
        ping = math.floor(ping)

        res = {}

        res['name'] = name
        res['map'] = map
        res['gametype'] = keywords
        res['players'] = players
        res['max_players'] = max_players
        res['addr'] = address
        res['gameport'] = gameport
        res['stat'] = "online"
        res['qport'] = qport
        res['ping'] = str(ping) + "ms"

        j = json.dumps([res])

        print(j)
    except:
        sys.exit(1)

def get_rules(ip, qport):
    try:
        mods = dayzquery.dayz_rules((ip, int(qport))).mods
        for k in mods:
            print(k.workshop_id)
    except:
        sys.exit(1)

def get_names(ip, qport):
    try:
        mods = dayzquery.dayz_rules((ip, int(qport))).mods
        ids = []
        names = []
        for mod in mods:
            names.append(mod.name)
            ids.append(mod.workshop_id)
        res = {}
        res['names'] = names
        res['ids'] = ids
        j = json.dumps(res)
        print(j)
    except:
        sys.exit(1)

ip = sys.argv[1]
qport = sys.argv[2]
mode = sys.argv[3]

match mode:
    case "info":
        get_info(ip, qport)
    case "rules":
        get_rules(ip, qport)
    case "names":
        get_names(ip, qport)
    case "test":
        test_local(ip, qport)