# -*- coding: UTF-8 -*-
# pylint: disable=C0111,R0903

"""Display a stock quote from worldtradingdata.com

Requires the following python packages:
    * requests

Parameters:
    * stock.symbols : Comma-separated list of symbols to fetch
    * stock.change : Should we fetch change in stock value (defaults to True)
"""

import json
import urllib.request

import logging

import core.module
import core.widget
import core.decorators

import util.format

class Module(core.module.Module):
    @core.decorators.every(hours=1)
    def __init__(self, config, theme):
        super().__init__(config, theme, core.widget.Widget(self.value))

        self.__symbols = self.parameter('symbols', '')
        self.__change = util.format.asbool(self.parameter('change', True))
        self.__value = None

    def value(self, widget):
        results = []
        if not self.__value:
            return 'n/a'
        data = json.loads(self.__value)

        for symbol in data['quoteResponse']['result']:
            valkey = 'regularMarketChange' if self.__change else 'regularMarketPrice'
            sym = symbol.get('symbol', 'n/a')
            currency = symbol.get('currency', 'USD')
            val = 'n/a' if not valkey in symbol else '{:.2f}'.format(symbol[valkey])
            results.append('{} {} {}'.format(sym, val, currency))
        return u' '.join(results)

    def fetch(self):
        if self.__symbols:
            url = 'https://query1.finance.yahoo.com/v7/finance/quote?symbols='
            url += self.__symbols + '&fields=regularMarketPrice,currency,regularMarketChange'
            return urllib.request.urlopen(url).read().strip()
        else:
            logging.error('unable to retrieve stock exchange rate')
            return None

    def update(self):
        self.__value = self.fetch()

# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4