import requests
import json

# Base URL for the Gogh JSON files in the GitHub repository
base_url = "https://raw.githubusercontent.com/Gogh-Co/Gogh/master/json/"

# GitHub API URL to list the contents of the "json" directory
api_url = "https://api.github.com/repos/Gogh-Co/Gogh/contents/json"

# Function to scrape all theme filenames from the GitHub API
def fetch_theme_filenames():
    response = requests.get(api_url)
    if response.status_code == 200:
        files = response.json()
        # Filter JSON files and return their names
        return [file["name"] for file in files if file["name"].endswith(".json")]
    else:
        print(f"Failed to fetch theme filenames from GitHub API, status code: {response.status_code}")
        return []

# Helper function to map Gogh colors to the desired format
def map_theme_colors(theme_data):
    return {
        "name": theme_data.get("name", "Unknown Theme"),
        "colors": {
            "primary": {
                "background": theme_data.get("background", "#000000"),
                "foreground": theme_data.get("foreground", "#FFFFFF"),
            },
            "normal": {
                "black": theme_data.get("background", "#000000"),
                "red": theme_data.get("color_02", "#000000"),
                "green": theme_data.get("color_03", "#000000"),
                "yellow": theme_data.get("color_04", "#000000"),
                "blue": theme_data.get("color_05", "#000000"),
                "magenta": theme_data.get("color_06", "#000000"),
                "cyan": theme_data.get("color_07", "#000000"),
                "white": theme_data.get("color_08", "#000000"),
            },
            "bright": {
                "black": theme_data.get("color_09", "#000000"),
                "red": theme_data.get("color_10", "#000000"),
                "green": theme_data.get("color_11", "#000000"),
                "yellow": theme_data.get("color_12", "#000000"),
                "blue": theme_data.get("color_13", "#000000"),
                "magenta": theme_data.get("color_14", "#000000"),
                "cyan": theme_data.get("color_15", "#000000"),
                "white": theme_data.get("foreground", "#000000"),
            }
        }
    }

# List to hold all the themes
themes = []

# Fetch all theme filenames from the GitHub API
theme_filenames = fetch_theme_filenames()

# Loop through the list of theme filenames and fetch each theme
for filename in theme_filenames:
    theme_url = base_url + filename
    response = requests.get(theme_url)
    if response.status_code == 200:
        theme_data = response.json()
        formatted_theme = map_theme_colors(theme_data)
        themes.append(formatted_theme)
    else:
        print(f"Failed to fetch {filename}")

# Output the formatted themes as a JSON array
output_file = "formatted_themes.json"
with open(output_file, "w") as out_file:
    json.dump(themes, out_file, indent=2)

print(f"Formatted themes saved to {output_file}")