import json


class filler():
    def __init__(self, name = "None", floor_code = []):
        self.name = name
        self.floor_code = floor_code if floor_code else self.get_default_floor_code()
        
    def export2json(self):
        filename = f"DATA/Levels/{self.name}/data.json"
        with open(filename, 'w') as f: 
            json.dump(self.level_data, f)

    def fill_level(self, floor_code, name = "Default"):
        self.level_data = {
            "name": name,
            "start_point": {
                "x": 4,
                "y": 8,
            },
            "enemy_types": [
                [
                    {
                        "type": "little_spider",
                        "sprite": "DATA/Sprites/Enemies/Tier 1/little-spider.png",
                    }
                ],
                [
                    {
                        "type": "wolf",
                        "sprite": "DATA/Sprites/Enemies/Tier 2/wolf.png",
                    }
                ],
            ],
            "enemy_spawns": [[
                 { "x" : 1, "y" : 3, "tier": 1, "sleep": 600, "delay": 600},
                 { "x" : 12, "y" : 7,"tier": 1, "sleep": 9000, "delay": 9000 },
                 { "x" : 1, "y" : 4, "tier": 1,"sleep": 800, "delay": 800 },
                 { "x" : 10, "y" : 0,"tier": 1, "sleep": 600, "delay": 600 }
            ]],
            
            "size" : [],
            "floor": []
        }
        # Загрузка пола
        
        # floor_code - закодированная информация об уровне, представляет собой ас массив последовательностей 2х чисел:
        # начало пола, конец пола
        # Ключами являются координаты по y
        
        sprite  = "DATA/Sprites/Floor/floor_grey.png"
        y = 0
        x_max = 1
        y_max = 1
        
        while y < 15:
            if y in floor_code:
                for x_len in floor_code[y]:
                    x  = x_len["s"]
                    while x <= x_len["e"]:
                        if x > x_max: x_max = x
                        self.level_data["floor"].append({"sprite": sprite, "x": x, "y": y})
                        x = x+1
                if y > y_max: y_max = y
                y = y + 1
            else:
                break
            
        self.level_data["size"] = [x_max, y_max]

    def get_default_floor_code(self):
        return {
             0: [
                 { "s" : 5, "e" : 6 },
                 { "s" : 10, "e" : 12 },
             ],
             1:[
                 { "s" : 5, "e" : 13 },
             ],
             2:[
                 { "s" : 4, "e" : 13 },
             ],
             3:[
                 { "s" : 1, "e" : 13 },
             ],
             4:[
                 { "s" : 1, "e" : 13 },
             ],
             5:[
                 { "s" : 1, "e" : 13 },
             ],
             6:[
                 { "s" : 0, "e" : 12 },
             ],
             7:[
                 { "s" : 0, "e" : 12 },
             ],
             8:[
                 { "s" : 1, "e" : 12 },
             ],
             9:[
                 { "s" : 3, "e" : 11 },
             ],
             10:[
                 { "s" : 6, "e" : 8 },
             ]
        }