// ==UserScript==
// @name         name-color: cohost edition!
// @namespace    https://terezi.pyrope.net
// @version      0.2
// @description  colors names based on `name-color:` statements in profiles. there are no other editions
// @author       mehbark
// @match        https://*.cohost.org/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=cohost.org
// @grant        none
// ==/UserScript==

const mentionee = elem => elem.href.split("/").at(-1);

function doit() {
    "use strict";

    // not just literal mentions btw
    const mentions = [
        ...document.querySelectorAll("a[href^='https://cohost.org/']"),
    ].filter(
        a =>
            !(
                a.href.includes("/rc/") ||
                // sorry, @post
                a.href.includes("/post/") ||
                // sorry, @tagged
                a.href.includes("/tagged/") ||
                // sorry, @ask
                a.href.endsWith("/ask") ||
                a.href.endsWith("/")
            )
    );

    const names = [...new Set(mentions.map(mentionee))];
    names.sort();

    const requester = document
        .querySelector("header")
        .querySelector("span")
        .innerText.slice(1);

    const url = new URL("https://pyrope.net/name-color/style.css");
    url.searchParams.append("requester", requester);

    for (const name of names) {
        url.searchParams.append("name", name);
    }

    let style = document.head.querySelector(".name-color-stylesheet");
    if (style) {
        const style2 = document.createElement("link");
        style2.rel = "stylesheet";
        style2.href = url.toString();
        style2.onload = () => {
            document.head.querySelectorAll(".name-color-stylesheet").forEach(s => s.remove());
            style2.className = "name-color-stylesheet";
        };
        document.head.appendChild(style2);
    } else {
        style = document.createElement("link");
        style.className = "name-color-stylesheet";
        style.rel = "stylesheet";
        style.href = url.toString();
        document.head.appendChild(style);
    }
}

new MutationObserver(doit).observe(document.body, {
    subtree: true,
    childList: true,
});

doit();