# from json import dumps, loads
import asyncio
from os import environ
try:
    from tiramisu_api import Config
    class TestConfig(Config):
        def __init__(self,
                     config):
            self.test_option = config.option
            json = self.test_option.dict()
            # assert json == loads(dumps(json))
            super().__init__(json)

        def send_data(self,
                      updates):
            return self.updates_data(self.test_option.updates(updates))
    PARAMS = ['tiramisu', 'tiramisu-api']
except:
    PARAMS = ['tiramisu']

import pytest


def get_config(config, type, error=False):
    if type == 'tiramisu':
        return config
    if error:
        config.property.add('demoting_error_warning')
    return TestConfig(config)


def value_list(values):
    if values[0] == '':
        del values[0]
    return tuple(values)


def global_owner(config, config_type):
    return config.owner.get()


@pytest.fixture(params=PARAMS)
def config_type(request):
    return request.param


def parse_od_get(dico):
    ret = {}
    for k, v in dico.items():
        if k.isoptiondescription():
            if k.isleadership():
                leader_path = k.leader().path()
                ret_leadership = []
                for variable, value in v.items():
                    if variable.path() == leader_path:
                        for val in value:
                            ret_leadership.append({leader_path: val})
                    else:
                        ret_leadership[variable.index()][variable.path()] = value
                ret[leader_path] = ret_leadership
            else:
                ret.update(parse_od_get(v))
        else:
            ret[k.path()] = v
    return ret