# -*- coding: utf-8 -*-
#
# Station display and eddb.io lookup
#

import cPickle
import csv
import os
from os.path import join
import sys

from config import config


STATION_UNDOCKED = u'×'	# "Station" name to display when not docked = U+00D7

this = sys.modules[__name__]	# For holding module globals

# (system_id, is_populated) by system_name
with open(join(config.respath, 'systems.p'),  'rb') as h:
    this.system_ids  = cPickle.load(h)

# station_id by (system_id, station_name)
with open(join(config.respath, 'stations.p'), 'rb') as h:
    this.station_ids = cPickle.load(h)


# Main window clicks
def system_url(system_name):
    if system_id(system_name):
        return 'https://eddb.io/system/%d' % system_id(system_name)
    else:
        return None

def station_url(system_name, station_name):
    if station_id(system_name, station_name):
        return 'https://eddb.io/station/%d' % station_id(system_name, station_name)
    else:
        return system_url(system_name)

# system_name -> system_id or 0
def system_id(system_name):
    return this.system_ids.get(system_name, [0, False])[0]

# system_name -> is_populated
def system_populated(system_name):
    return this.system_ids.get(system_name, [0, False])[1]

# (system_name, station_name) -> station_id or 0
def station_id(system_name, station_name):
    return this.station_ids.get((system_id(system_name), station_name), 0)


def plugin_start():
    return 'eddb'

def plugin_app(parent):
    this.system_link  = parent.children['system']	# system label in main window
    this.station_link = parent.children['station']	# station label in main window
    this.station_link.configure(popup_copy = lambda x: x != STATION_UNDOCKED)

def prefs_changed(cmdr, is_beta):
    if config.get('system_provider') == 'eddb':
        this.system_link['url'] = system_url(system_link['text'])	# Override standard URL function

def journal_entry(cmdr, is_beta, system, station, entry, state):
    if config.get('system_provider') == 'eddb':
        this.system_link['url'] = system_url(system)	# Override standard URL function
    this.station_link['text'] = station or (system_populated(system) and STATION_UNDOCKED or '')
    this.station_link.update_idletasks()

def cmdr_data(data, is_beta):
    if config.get('system_provider') == 'eddb':
        this.system_link['url'] = system_url(data['lastSystem']['name'])	# Override standard URL function
    this.station_link['text'] = data['commander']['docked'] and data['lastStarport']['name'] or (system_populated(data['lastSystem']['name']) and STATION_UNDOCKED or '')
    this.station_link.update_idletasks()