from six import text_type as unicodestr

from django.utils.translation import ugettext as _, ugettext_lazy
from .. import add_type, question_proc, answer_proc, AnswerException

perioddict = {
    "second" : ugettext_lazy("second(s)"),
    "minute" : ugettext_lazy("minute(s)"),
    "hour" : ugettext_lazy("hour(s)"),
    "day" : ugettext_lazy("day(s)"),
    "week" : ugettext_lazy("week(s)"),
    "month" : ugettext_lazy("month(s)"),
    "year" : ugettext_lazy("year(s)"),
}

@question_proc('timeperiod')
def question_timeperiod(request, question):
    cd = question.getcheckdict()
    if "units" in cd:
        units = cd["units"].split(',')
    else:
        units = ["day","week","month","year"]
    timeperiods = []
    if not units:
        units = ["day","week","month","year"]

    key1 = "question_%s" % question.number
    key2 = "question_%s_unit" % question.number
    value = request.POST.get(key1, '')
    unitselected = request.POST.get(key2, units[0])

    for x in units:
        if x in perioddict:
            timeperiods.append( (x, unicodestr(perioddict[x]), unitselected==x) )
    return {
        "required" : "required" in cd,
        "timeperiods" : timeperiods,
        "value" : value,
    }

@answer_proc('timeperiod')
def process_timeperiod(question, answer):
    if not answer['ANSWER'] or not 'unit' in answer:
        raise AnswerException(_(u"Invalid time period"))
    period = answer['ANSWER'].strip()
    if period:
        try:
            period = str(int(period))
        except ValueError:
            raise AnswerException(_(u"Time period must be a whole number"))
    unit = answer['unit']
    checkdict = question.getcheckdict()
    if checkdict and 'units' in checkdict:
        units = checkdict['units'].split(',')
    else:
        units = ('day', 'hour', 'week', 'month', 'year')
    if not period and "required" in checkdict:
        raise AnswerException(_(u'Field cannot be blank'))
    if unit not in units:
        raise AnswerException(_(u"Invalid time period"))
    return "%s; %s" % (period, unit)

add_type('timeperiod', 'Time Period [input, select]')

