import os
import re
import shutil

for dir in os.listdir("."):
    if not os.path.isdir(dir):
        continue

    print("\nProcessing " + dir)
    v = dir.split("_")
    branch = "master_Pro"
    if not v[0].isdigit():
        branch += "_" + v[0]
        v = v[1:]

    version = ".".join(v[:-1])
    print(branch + ": " + version)
    if version == "":
        print("Empty version")
        continue

    JS = '''
    $(document).ready(() => {
    '''
    JS += f"""
    const version = "{version}";
    const branch  = "{branch}";
    """

    JS += '''
        fetch("https://arongranberg.com/astar/documentation/versions.php").then(r => r.json()).then(data => {
            let html = "";
            let seenVersion = new Set();
            const pathParts = window.location.href.split("/");
            const page = pathParts[pathParts.length - 1];
            let latest = data.find(item => item.name == branch);
            if (latest.version !== version) {
                const el = document.createElement("template");
                el.innerHTML = `<a href='https://arongranberg.com/astar/documentation/${latest.docs}/${page}' class="btn btn-danger">View latest version</a>`;
                document.getElementById("navbar-header").appendChild(el.content.firstChild);
            }
            for (let i = 0; i < data.length; i++) {
                if (data[i].docs === null) continue;
                if (seenVersion.has(data[i].version)) continue;
                seenVersion.add(data[i].version);
                var item = data[i];
                const date = new Date(item.lastUpdated);
                // Format date as YYYY-MM-DD
                const formattedDate = date.toISOString().split('T')[0];
                let spans = `<span class='item-version'>${item.version}</span><span class='item-date'>${formattedDate}</span>`;
                if (item.name.includes("_dev")) {
                    spans += `<span class='version-badge'>beta</span>`
                }
                html += `<li><a href='https://arongranberg.com/astar/documentation/${item.docs}/${page}'>${spans}</a></li>`;
            }
            document.getElementById("package-version-alternatives").innerHTML = html;
        });
    });
    '''

    CSS = '''
    nav.navbar .navbar-header {
    display: flex;
    flex-direction: row;
    align-items: center;
    }
    nav.navbar .dropdown.package-version {
    font-size: 18px;
    margin-right: 8px;
    }
    nav.navbar .dropdown.package-version button {
    background-color: rgba(255, 255, 255, 0);
    border-color: rgba(255, 255, 255, 0);
    transition: background-color 0.1s, border-color 0.1s, color 0.1s;
    color: #777;
    }
    nav.navbar .dropdown.package-version button .caret {
    opacity: 0.5;
    transition: opacity 0.1s;
    }
    nav.navbar .dropdown.package-version button:hover {
    border-color: #adadad;
    color: #333333;
    }
    nav.navbar .dropdown.package-version button:hover .caret {
    opacity: 1;
    }
    nav.navbar .dropdown.package-version button:active {
    border-color: #999;
    }
    nav.navbar .dropdown.package-version li a {
    gap: 5px;
    display: flex;
    flex-direction: row;
    justify-content: flex-start;
    }
    nav.navbar .dropdown.package-version .item-version {
    width: 50px;
    flex-grow: 0;
    flex-shrink: 0;
    }
    nav.navbar .dropdown.package-version .item-date {
    color: #666;
    margin-right: 25px;
    flex-grow: 1;
    }
    nav.navbar .dropdown.package-version .dropdown-menu {
    max-height: 385px;
    overflow-y: scroll;
    }
    nav.navbar .version-badge {
    font-size: 10px;
    padding: 2px 8px;
    background: #3872d7;
    color: white;
    border-radius: 3px;
    font-weight: bold;
    }
    '''

    if not os.path.exists(f"{dir}/resources/docs.js"):
        print("No docs.js file found in " + dir)
        continue

    text = open(f"{dir}/resources/docs.js", "r").read()
    text += "\n" + JS
    open(f"{dir}/resources/docs.js", "w").write(text)

    text = open(f"{dir}/resources/style.css", "r").read()
    text = text.replace("nav.navbar .package-version", "nav.navbar .package-version-ignored")
    text += "\n" + CSS
    open(f"{dir}/resources/style.css", "w").write(text)


    for f in os.listdir(dir):
        if f.endswith(".html") or f.endswith(".php"):
            text = open(dir + "/" + f, "r").read()
            text = re.sub(r"<span class=\"package-version\"\">([\d\.]+)</span>", r'''
                        <div class="dropdown package-version">
                    <button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
                        \1
                    <span class="caret"></span>
                    </button>
                    <ul class="dropdown-menu" id="package-version-alternatives">
                    <li><a href="#">\1</a></li>
                    </ul>
                </div>
    ''', text)
            text = text.replace(r'<div class="navbar-header">', r'<div class="navbar-header" id="navbar-header">')
            open(dir + "/" + f, "w").write(text)


