<?php

function scoreOrder($members, $system, $useDominant = false) {
    global $isLowerLoggedIn;
    global $isLoggedIn;

    $ordered = [];
    foreach ($members as $member) {
        if ($member["name"] !== "unknown" && $member["name"] !== "fusion" && $member["name"] !== "new" && !str_starts_with($member["name"], "smol") && !str_ends_with($member["name"], "-travelling") && file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/$member[id].json")) {
            if (isset($member["color"])) {
                if ($useDominant) {
                    $rgb = [
                        hexdec(substr($member["dominant_color"] ?? $member["color"], 0, 2)),
                        hexdec(substr($member["dominant_color"] ?? $member["color"], 2, 2)),
                        hexdec(substr($member["dominant_color"] ?? $member["color"], 4, 2))
                    ];
                } else {
                    $rgb = [
                        hexdec(substr($member["color"], 0, 2)),
                        hexdec(substr($member["color"], 2, 2)),
                        hexdec(substr($member["color"], 4, 2))
                    ];
                }

                $hsl = rgbToHsl(
                    $rgb[0],
                    $rgb[1],
                    $rgb[2]
                );
            } else {
                $rgb = [255, 255, 255];
                $hsl = rgbToHsl(255, 255, 255);
            }

            $systemID = $member["system"] ?? $system;

            $member["_system"] = $member["system"] = $systemID;
            $member["_metadata"] = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/$member[id].json"), true));
            $member["_score"] = $hsl[0];

            if (!isset($member["_metadata"]["private"]) || !$member["_metadata"]["private"] || $isLoggedIn || $isLowerLoggedIn) {
                $ordered[] = $member;
            }
        }
    }

    uasort($ordered, function($a, $b) {
        return $a["_score"] - $b["_score"];
    });

    return $ordered;
}

function scoreOrderGlobal() {
    global $isLowerLoggedIn;
    global $isLoggedIn;

    $ordered = [];
    foreach (json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd/members.json"), true) as $member) {
        if ($member["name"] !== "unknown" && $member["name"] !== "fusion" && $member["name"] !== "new" && !str_starts_with($member["name"], "smol") && !str_ends_with($member["name"], "-travelling") && file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/$member[id].json")) {
            if (isset($member["color"])) {
                $rgb = [
                    hexdec(substr($member["color"], 0, 2)),
                    hexdec(substr($member["color"], 2, 2)),
                    hexdec(substr($member["color"], 4, 2))
                ];
                $hsl = rgbToHsl(
                    $rgb[0],
                    $rgb[1],
                    $rgb[2]
                );
            } else {
                $rgb = [255, 255, 255];
                $hsl = rgbToHsl(255, 255, 255);
            }
            $member["_score"] = $hsl[0];
            $member["_system"] = "gdapd";
            $member["system"] = "gdapd";
            $member["_metadata"] = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/$member[id].json"), true));

            if (!isset($member["_metadata"]["private"]) || !$member["_metadata"]["private"] || $isLoggedIn || $isLowerLoggedIn) {
                $ordered[] = $member;
            }
        }
    }

    foreach (json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc/members.json"), true) as $member) {
        if ($member["name"] !== "unknown" && $member["name"] !== "fusion" && $member["name"] !== "new" && !str_starts_with($member["name"], "smol") && !str_ends_with($member["name"], "-travelling") && file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/$member[id].json")) {
            if (isset($member["color"])) {
                $rgb = [
                    hexdec(substr($member["color"], 0, 2)),
                    hexdec(substr($member["color"], 2, 2)),
                    hexdec(substr($member["color"], 4, 2))
                ];
                $hsl = rgbToHsl(
                    $rgb[0],
                    $rgb[1],
                    $rgb[2]
                );
            } else {
                $rgb = [255, 255, 255];
                $hsl = rgbToHsl(255, 255, 255);
            }
            $member["_score"] = $hsl[0];
            $member["_system"] = "ynmuc";
            $member["system"] = "ynmuc";
            $member["_metadata"] = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/$member[id].json"), true));

            if (!isset($member["_metadata"]["private"]) || !$member["_metadata"]["private"] || $isLoggedIn || $isLowerLoggedIn) {
                $ordered[] = $member;
            }
        }
    }

    if ($isLowerLoggedIn || $isLoggedIn) {
        $app = $GLOBALS["ColdHazeApp"] ?? json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true);
        foreach (json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/other/members.json"), true) as $member) {
            if ($member["name"] !== "unknown" && $member["name"] !== "fusion" && $member["name"] !== "new" && !str_starts_with($member["name"], "smol") && !str_ends_with($member["name"], "-travelling") && file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/$member[id].json")) {
                if (isset($member["color"])) {
                    $rgb = [
                        hexdec(substr($member["color"], 0, 2)),
                        hexdec(substr($member["color"], 2, 2)),
                        hexdec(substr($member["color"], 4, 2))
                    ];
                    $hsl = rgbToHsl(
                        $rgb[0],
                        $rgb[1],
                        $rgb[2]
                    );
                } else {
                    $rgb = [255, 255, 255];
                    $hsl = rgbToHsl(255, 255, 255);
                }
                $member["_score"] = $hsl[0];
                $member["_system"] = $app["other"]["id"];
                $member["system"] = $app["other"]["id"];
                $member["_metadata"] = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/$member[id].json"), true));
                $ordered[] = $member;
            }
        }
    }

    uasort($ordered, function($a, $b) {
        return $a["_score"] - $b["_score"];
    });

    return array_values($ordered);
}