import yaml
import os

def init_customization():
    configuration = {
        "directories": {
            "mirror_module_path": False,
            "output": "",
            "raster_images": "",
            "vector_images": "",
            "sounds": "",
            "temporary_storage": "",
        },
        "tex": {
            "executable": "",
            "template_file": "",
            "intermediate_filetype": "",
            "text_to_replace": "[tex_expression]",
        },
        "universal_import_line": "from manimlib import *",
        "style": {
            "font": "Consolas",
            "background_color": "",
        },
        "window_position": "UR",
        "window_monitor": 0,
        "break_into_partial_movies": False,
        "camera_qualities": {
            "low": {
                "resolution": "854x480",
                "frame_rate": 15,
            },
            "medium": {
                "resolution": "1280x720",
                "frame_rate": 30,
            },
            "high": {
                "resolution": "1920x1080",
                "frame_rate": 60,
            },
            "ultra_high": {
                "resolution": "3840x2160",
                "frame_rate": 60,
            },
            "default_quality": "",
        }
    }

    print("Initialize configuration")
    scope = input(" Please select the scope of the configuration [global/local]: ")
    if scope == "global":
        from manimlib.config import get_manim_dir
        file_name = os.path.join(get_manim_dir(), "manimlib", "default_config.yml")
    else:
        file_name = os.path.join(os.getcwd(), "custom_config.yml")

    print("\n directories:")
    configuration["directories"]["output"] = input("  [1/8] Where should manim output video and image files place: ")
    configuration["directories"]["raster_images"] = input("  [2/8] Which folder should manim find raster images (.jpg .png .gif) in (optional): ")
    configuration["directories"]["vector_images"] = input("  [3/8] Which folder should manim find vector images (.svg .xdv) in (optional): ")
    configuration["directories"]["sounds"] = input("  [4/8] Which folder should manim find sound files (.mp3 .wav) in (optional): ")
    configuration["directories"]["temporary_storage"] = input("  [5/8] Which folder should manim storage temporary files: ")

    print("\n tex:")
    tex = input("  [6/8] Which executable file to use to compile [latex/xelatex]: ")
    if tex == "latex":
        configuration["tex"]["executable"] = "latex"
        configuration["tex"]["template_file"] = "tex_template.tex"
        configuration["tex"]["intermediate_filetype"] = "dvi"
    else:
        configuration["tex"]["executable"] = "xelatex -no-pdf"
        configuration["tex"]["template_file"] = "ctex_template.tex"
        configuration["tex"]["intermediate_filetype"] = "xdv"

    print("\n style:")
    configuration["style"]["background_color"] = input("  [7/8] Which background color do you want (hex code): ")

    print("\n camera_qualities:")
    print("  Four defined qualities: low: 480p15  medium: 720p30  high: 1080p60  ultra_high: 2160p60")
    configuration["camera_qualities"]["default_quality"] = input("  [8/8] Which one to choose as the default rendering quality [low/medium/high/ultra_high]: ")

    with open(file_name, 'w', encoding="utf_8") as file:
        yaml.dump(configuration, file)

    print(f"\nYou have set up a {scope} configuration file")
    print(f"You can manually modify it again in: {file_name}\n")
