import os
import json



def setup(app):
    """Setup connects events to the components output builder"""
    app.connect("html-page-context", add_component_details)
    app.connect("build-finished", create_output)
    app.compoents_output = {}

    is_production = os.getenv("NETLIFY") == "true"

    return {
        "version": "1.0.0",
        "parallel_read_safe": True,
        "parallel_write_safe": not is_production,
    }


def add_component_details(app, pagename, templatename, context, doctree):
    """As each page is built, collect page details for the output."""
    if pagename.startswith("components/"):
        page_key = pagename[11:].replace("/", "_")
        component_name = pagename.split("/")[-1]
        page_data = {
            "title": context["title"],
            "url": context["pageurl"],
            "path": f"components/{component_name}",
        }
        if os.path.exists(os.path.join(app.builder.srcdir, "images", component_name + ".png")):
            page_data["image"] = app.builder.config.html_baseurl + "/_images/" + component_name + ".png"
        elif os.path.exists(os.path.join(app.builder.srcdir, "images", component_name + ".jpg")):
            page_data["image"] = app.builder.config.html_baseurl + "/_images/" + component_name + ".jpg"

        app.compoents_output[page_key] = page_data


def create_output(app, exception):
    """Generates the components.json from the collected component pages"""
    with open(os.path.join(app.builder.outdir, "components.json"), "wt") as f:
        f.write(json.dumps(app.compoents_output))