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

import json
import re
import io
from db import *
from PIL import Image

with open("../../extraction/raw-31-2/data.cdb.json") as f:
    raw = json.load(f)
with open("../../clean/31-2/main.zh.mo.json") as f:
    trans = json.load(f)
img = Image.open("../../extraction/raw-31-2/cardIcons.png")

db.bind(provider="sqlite", filename="../../clean/31-2/data.sqlite3")
db.generate_mapping()

lines = raw["sheets"][1]["lines"]

with db_session:
    for i in lines:
        if i["group"] == 4:
            i["name"] = trans[i["name"]]["msgstr"][0]
            if "ambiantDesc" in i:
                i["ambiantDesc"] = trans[i["ambiantDesc"].strip()]["msgstr"][0]
            else:
                i["ambiantDesc"] = ""
            if "gameplayDesc" in i:
                i["gameplayDesc"] = trans[i["gameplayDesc"].strip()]["msgstr"][0]
                if i["props"]:

                    def replace_props(m):
                        result = i["props"][m.group(1)]
                        if isinstance(result, list):
                            result = result[0]
                        if not isinstance(result, str):
                            result = str(result)
                        return result

                    i["gameplayDesc"], _ = re.subn(
                        r"::\+?(.*?)::", replace_props, i["gameplayDesc"]
                    )
            else:
                i["gameplayDesc"] = ""
            x = i["icon"]["x"] * 24
            y = i["icon"]["y"] * 24
            box = (x, y, x + 24, y + 24)
            region = img.crop(box)
            region_arr = io.BytesIO()
            region.save(region_arr, format="PNG")

            stats_map = {"Brutality": 1, "Survival": 2, "Tactic": 4}
            stats = 0
            for t in ["tier1", "tier2"]:
                if t in i:
                    stats += stats_map[i[t]]

            Melee(
                name=i["name"],
                description=i["ambiantDesc"],
                mechanism=i["gameplayDesc"],
                icon=region_arr.getbuffer().tobytes(),
                stats=stats,
            )
