from couchpotato.core.helpers.encoding import toUnicode
from couchpotato.core.helpers.variable import natcmp
from urllib import unquote
import re


def getParams(params):

    reg = re.compile('^[a-z0-9_\.]+$')

    temp = {}
    for param, value in sorted(params.iteritems()):

        nest = re.split("([\[\]]+)", param)
        if len(nest) > 1:
            nested = []
            for key in nest:
                if reg.match(key):
                    nested.append(key)

            current = temp

            for item in nested:
                if item is nested[-1]:
                    current[item] = toUnicode(unquote(value))
                else:
                    try:
                        current[item]
                    except:
                        current[item] = {}

                    current = current[item]
        else:
            temp[param] = toUnicode(unquote(value))
            if temp[param].lower() in ['true', 'false']:
                temp[param] = temp[param].lower() != 'false'

    return dictToList(temp)

def dictToList(params):

    if type(params) is dict:
        new = {}
        for x, value in params.iteritems():
            try:
                new_value = [dictToList(value[k]) for k in sorted(value.iterkeys(), cmp = natcmp)]
            except:
                new_value = value

            new[x] = new_value
    else:
        new = params

    return new
