from PyQt5.QtGui import *
from electrum.i18n import _


import datetime
from collections import defaultdict
from electrum.bitcoin import COIN

import matplotlib
matplotlib.use('Qt5Agg')
import matplotlib.pyplot as plt
import matplotlib.dates as md
from matplotlib.patches import Ellipse
from matplotlib.offsetbox import AnchoredOffsetbox, TextArea, DrawingArea, HPacker


class NothingToPlotException(Exception):
    def __str__(self):
        return _("Nothing to plot.")


def plot_history(history):
    if len(history) == 0:
        raise NothingToPlotException()
    hist_in = defaultdict(int)
    hist_out = defaultdict(int)
    for item in history:
        if not item['confirmations']:
            continue
        if item['timestamp'] is None:
            continue
        value = item['value'].value/COIN
        date = item['date']
        datenum = int(md.date2num(datetime.date(date.year, date.month, 1)))
        if value > 0:
            hist_in[datenum] += value
        else:
            hist_out[datenum] -= value

    f, axarr = plt.subplots(2, sharex=True)
    plt.subplots_adjust(bottom=0.2)
    plt.xticks( rotation=25 )
    ax = plt.gca()
    plt.ylabel('BTC')
    plt.xlabel('Month')
    xfmt = md.DateFormatter('%Y-%m-%d')
    ax.xaxis.set_major_formatter(xfmt)
    axarr[0].set_title('Monthly Volume')
    xfmt = md.DateFormatter('%Y-%m')
    ax.xaxis.set_major_formatter(xfmt)
    width = 20

    r1 = None
    r2 = None
    dates_values = list(zip(*sorted(hist_in.items())))
    if dates_values and len(dates_values) == 2:
        dates, values = dates_values
        r1 = axarr[0].bar(dates, values, width, label='incoming')
        axarr[0].legend(loc='upper left')
    dates_values = list(zip(*sorted(hist_out.items())))
    if dates_values and len(dates_values) == 2:
        dates, values = dates_values
        r2 = axarr[1].bar(dates, values, width, color='r', label='outgoing')
        axarr[1].legend(loc='upper left')
    if r1 is None and r2 is None:
        raise NothingToPlotException()
    return plt
