#!/usr/bin/env python3
#-*- coding: utf-8 -*-

"""
Get a fortune from a JSON file.

File is under EUPL1.2
Author: kujiu
"""
import os
import json
import random
from locale import gettext as _
from variety.plugins.IQuoteSource import IQuoteSource

SRCFILE = "~/.fortunes.json"

class JsonFortuneSource(IQuoteSource):
    """ Get quote from JSON fortune file """
    quotes = {}

    @classmethod
    def get_info(cls):
        return {
            "name": "JSON Fortunes",
            "description": _("Displays quotes using a JSON file"),
            "author": "kujiu",
            "version": "0.1"
        }

    def supports_search(self):
        return False

    def load_srcfile(self):
        """
        Load quote from file
        """
        if self.quotes:
            return

        srcfile = os.path.expanduser(
            os.path.expandvars(SRCFILE)
        )

        with open(srcfile) as fin:
            self.quotes = json.load(fin)

    def get_random(self):
        self.load_srcfile()

        quote = ""
        count = 0
        while not quote and count < 50:
            count += 1
            lang = random.choice([lang for lang in self.quotes.keys()])
            category = random.choice([cat for cat in self.quotes[lang].keys()])
            if not self.quotes[lang][category]:
                continue
            author = random.choice(
                [author for author in self.quotes[lang][category].keys()])
            if not self.quotes[lang][category][author]:
                continue
            quote = random.choice(self.quotes[lang][category][author])

        return [{
            "quote": quote,
            "author": author,
            "sourceName": "WikiQuote",
            "link": "https://%s.wikiquote.org/wiki/%s" % (lang, author)
        }]

    def get_for_author(self, author):
        return []

    def get_for_keyword(self, keyword):
        return []
