# https://t.me/ZGQinc

import os
import json
import uuid

def generate_uuid():
    return str(uuid.uuid4())

def write_file(path, content):
    with open(path, "w", encoding='utf-8') as f:
        f.write(content)

def create_addon(folder_name, display_name, description):
    base_name = folder_name
    rp_folder = os.path.join(base_name, f"{base_name}_Resource_Pack")
    bp_folder = os.path.join(base_name, f"{base_name}_Behavior_Pack")
    
    rp_header_uuid = generate_uuid()
    rp_module_uuid = generate_uuid()
    bp_header_uuid = generate_uuid()
    bp_module_uuid = generate_uuid()

    dirs_rp = [
        "textures/blocks",
        "textures/items",
        "textures/entity",
        "textures/ui",
        "texts",
        "ui"
    ]
    for d in dirs_rp:
        os.makedirs(os.path.join(rp_folder, d), exist_ok=True)

    rp_manifest = {
        "format_version": 2,
        "header": {
            "name": display_name,
            "description": description,
            "uuid": rp_header_uuid,
            "version": [1, 0, 0],
            "min_engine_version": [1, 20, 0]
        },
        "modules": [
            {
                "type": "resources",
                "uuid": rp_module_uuid,
                "version": [1, 0, 0]
            }
        ],
        "dependencies": [
            {
                "uuid": bp_header_uuid,
                "version": [1, 0, 0]
            }
        ]
    }
    write_file(os.path.join(rp_folder, "manifest.json"), json.dumps(rp_manifest, indent=4))

    lang_content_rp = f"pack.name={display_name}\npack.description={description}"
    write_file(os.path.join(rp_folder, "texts", "en_US.lang"), lang_content_rp)
    
    open(os.path.join(rp_folder, "pack_icon.png"), 'a').close()

    dirs_bp = [
        "entities",
        "functions",
        "structures/mystruct",
        "loot_tables",
        "recipes",
        "scripts/server",
        "items",
        "blocks",
        "texts"
    ]
    for d in dirs_bp:
        os.makedirs(os.path.join(bp_folder, d), exist_ok=True)

    bp_manifest = {
        "format_version": 2,
        "header": {
            "name": display_name,
            "description": description,
            "uuid": bp_header_uuid,
            "version": [1, 0, 0],
            "min_engine_version": [1, 20, 0]
        },
        "modules": [
            {
                "type": "data",
                "uuid": bp_module_uuid,
                "version": [1, 0, 0]
            }
        ],
        "dependencies": [
            {
                "uuid": rp_header_uuid,
                "version": [1, 0, 0]
            }
        ]
    }
    write_file(os.path.join(bp_folder, "manifest.json"), json.dumps(bp_manifest, indent=4))

    lang_content_bp = f"pack.name={display_name}\npack.description={description}"
    write_file(os.path.join(bp_folder, "texts", "en_US.lang"), lang_content_bp)

    write_file(os.path.join(bp_folder, "functions", "test.mcfunction"), "")

    open(os.path.join(bp_folder, "pack_icon.png"), 'a').close()

    print(f"\nDone. Created project '{base_name}'.")
    print(f"Folder: {os.path.abspath(base_name)}")

if __name__ == "__main__":
    f_name = input("Folder Name: ").strip()
    if not f_name:
        f_name = "NewAddon"

    d_name = input("Display Name: ").strip()
    if not d_name:
        d_name = f_name

    desc = input("Description: ").strip()
    if not desc:
        desc = f_name

    create_addon(f_name, d_name, desc)