import json
from collections import Counter

import matplotlib.pyplot as plt

try:
    from wordcloud import WordCloud
except BaseException:
    print("wordcloud er ikke installert, kan ikke lage ordskyer")


def make_cloud(json_text, top=100, background='white',
               stretch=lambda x: 2 ** (10 * x), width=500, height=500,
               font_path=None):
    """Create a word cloud from a frequency list."""
    pairs0 = Counter(json_text).most_common(top)
    pairs = {x[0]: stretch(x[1]) for x in pairs0}
    wc = WordCloud(
        font_path=font_path,
        background_color=background,
        width=width,
        # color_func=my_colorfunc,
        ranks_only=True,
        height=height).generate_from_frequencies(pairs)
    return wc


def draw_cloud(sky, width=20, height=20, fil=''):
    """Draw a word cloud produced by :func:`make_cloud`."""
    plt.figure(figsize=(width, height))
    plt.imshow(sky, interpolation='bilinear')
    figplot = plt.gcf()
    if fil != '':
        figplot.savefig(fil, format='png')


def cloud(df, column='', top=200, width=1000, height=1000, background='black',
          file='', stretch=10, font_path=None):
    """Make and draw a cloud from a pandas dataframe, using :func:`make_cloud` and
    :func:`draw_cloud`."""
    if column == '':
        column = df.columns[0]
    data = json.loads(df[column].to_json())
    a_cloud = make_cloud(data, top=top,
                         background=background, font_path=font_path,
                         stretch=lambda x: 2 ** (stretch * x), width=width,
                         height=height)
    draw_cloud(a_cloud, fil=file)