# Export various CSV formats
# -*- coding: utf-8 -*-

from os.path import join
import hashlib
import time

from config import config

bracketmap = {
    0: '',
    1: 'Low',
    2: 'Med',
    3: 'High',
}

# DEFAULT means semi-colon separation
# CSV means comma separation
(COMMODITY_DEFAULT, COMMODITY_CSV) = range(2)


def export(data, kind=COMMODITY_DEFAULT, filename=None):
    querytime = config.getint('querytime') or int(time.time())

    if not filename:
        filename = '{system}.{starport}.{time}.{kind}'.format(
            system=data['lastSystem']['name'].strip(),
            starport=data['lastStarport']['name'].strip(),
            time=time.strftime('%Y-%m-%dT%H.%M.%S', time.localtime(querytime)),
            kind='csv'
        )
        filename = join(config.get('outdir'), filename)

    if kind == COMMODITY_CSV:
        sep = ';'  # BUG: for fixing later after cleanup
        header = sep.join(('System', 'Station', 'Commodity', 'Sell', 'Buy', 'Demand', '', 'Supply', '', 'Date', '\n'))
        rowheader = sep.join((data['lastSystem']['name'], data['lastStarport']['name']))

    else:
        sep = ','
        header = sep.join(
            ('System', 'Station', 'Commodity', 'Sell', 'Buy', 'Demand', '', 'Supply', '', 'Average', 'FDevID', 'Date\n')
        )

        rowheader = sep.join((data['lastSystem']['name'], data['lastStarport']['name']))

    h = open(filename, 'wt')  # codecs can't automatically handle line endings, so encode manually where required
    h.write(header)

    for commodity in data['lastStarport']['commodities']:
        line = sep.join((
            rowheader,
            commodity['name'],
            commodity['sellPrice'] and str(int(commodity['sellPrice'])) or '',
            commodity['buyPrice'] and str(int(commodity['buyPrice'])) or '',
            str(int(commodity['demand'])) if commodity['demandBracket'] else '',
            bracketmap[commodity['demandBracket']],
            str(int(commodity['stock'])) if commodity['stockBracket'] else '',
            bracketmap[commodity['stockBracket']]
        ))

        if kind == COMMODITY_DEFAULT:
            line = sep.join((line, str(int(commodity['meanPrice'])), str(commodity['id']), data['timestamp'] + '\n'))

        else:
            line = sep.join((line, data['timestamp'] + '\n'))

        h.write(line)

    h.close()