<?php global $system; global $systemCommonName; global $systemID; global $member; global $memberData; global $memberCommonName; global $memberID; global $lang; global $pages; global $app; global $isLoggedIn; global $isLowerLoggedIn;

require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/util/session.inc";

if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/designs")) mkdir($_SERVER['DOCUMENT_ROOT'] . "/includes/data/designs");

if ($memberData["name"] === "fusion") {
    $title = ($memberCommonName === "fusion" ? $lang["member"]["merge"] : $memberCommonName);
} else {
    $title = $memberCommonName . " ยท " . $systemCommonName;
}

if ($memberData["name"] !== "unknown" && $memberData["name"] !== "fusion") {
    $metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/" . $memberID . ".json"), true));

    if ($metadata["private"] && !$isLoggedIn && !$isLowerLoggedIn) {
        peh_error("Page not found: " . strip_tags($member), 404);
    }
}

require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/header.inc';

$travelling = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/travelling/travelling.json"), true);

if ($memberData["name"] !== "unknown" && $memberData["name"] !== "fusion") {
    $metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/" . $memberID . ".json"), true));
}

global $isLoggedIn;

$frontersRaindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd/fronters.json"), true);
$frontersCloudburst = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc/fronters.json"), true);
$frontersOther = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/other/fronters.json"), true);

$fusionRaindrops = false;

if ($memberData["name"] === "fusion") {
    if (in_array("fusion", array_map(function ($i) {
        return $i["name"];
    }, $frontersRaindrops["members"]))) {
        $fusionRaindrops = true;

        $memberData = array_values(array_filter($frontersRaindrops["members"], function ($i) {
            return $i["name"] === "fusion";
        }))[0];
        $memberCommonName = $memberData['display_name'] ?? $memberData['name'];
        $memberID = $memberData['id'];
        $system = $systemID === "gdapd" ? "cloudburst" : "raindrops";
        $systemID = $system === "cloudburst" ? "ynmuc" : "gdapd";
    }
}

if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/designs/" . $memberID . ".json")) file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/designs/" . $memberID . ".json", json_encode([
    "_main" => [
        "name" => "Main",
        "note" => "Everyday appearance",
        "image" => null
    ]
]));

if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/ponies/" . $memberID . ".png")) {
    $designs = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/designs/" . $memberID . ".json"), true);
    $designs["_main"]["image"] = base64_encode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/assets/ponies/" . $memberData["id"] . ".png"));
}

?>

<div id="member-banner-container" style="width: calc(100% - 300px);height: <?= !isset($memberData["banner"]) ? "33vh" : "65vh" ?>;position: fixed;background-image: url('<?= getAsset($systemID, $memberID, !isset($memberData["banner"]) ? "avatars" : "banners") ?>');background-size: cover;background-position: center; top: 0;">
    <div id="member-banner-inner" style="height: 100%;width: 100%;background: linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,.25) 50%, rgba(0,0,0,1) 100%);<?= !isset($memberData["banner"]) ? "backdrop-filter:blur(100px);" : "" ?>"></div>
</div>

<style>
    .input-inherit {
        all: inherit;
        width: 200px;
        height: max-content;
        margin: 0;
    }
</style>

<script>
    window.onscroll = () => {
        document.getElementById("member-banner-container").style.height = (<?= !isset($memberData["banner"]) ? "33" : "65" ?> - ((window.scrollY / window.screen.availHeight) * 100)) + "vh";
    }

    function showPrivate() {
        document.getElementById("private-page-link").style.display = "none";
        document.getElementById("private-page-hidden").style.display = "block";
    }

    function updateDesignName(id) {
        if (id === "_main" && document.getElementById("design-" + id + "-name").value.trim() === "") {
            document.getElementById("design-" + id + "-name").value = "Main";
        } else {
            fetch("/api/design/?member=<?= $memberID ?>&type=name&id=" + id + "&value=" + encodeURIComponent(btoa(document.getElementById("design-" + id + "-name").value))).then((a) => {
                a.text().then((b) => {
                    if (b.trim() === "&") {
                        location.reload();
                    }
                })
            })
        }
    }

    function updateDesignNote(id) {
        fetch("/api/design/?member=<?= $memberID ?>&type=note&id=" + id + "&value=" + encodeURIComponent(btoa(document.getElementById("design-" + id + "-note").value)));
    }

    function _arrayBufferToBase64( buffer ) {
        var binary = '';
        var bytes = new Uint8Array( buffer );
        var len = bytes.byteLength;
        for (var i = 0; i < len; i++) {
            binary += String.fromCharCode( bytes[ i ] );
        }
        return window.btoa( binary );
    }

    async function uploadNewDesign() {
        let handles = await window.showOpenFilePicker({
            multiple: false
        });

        if (handles.length >= 1) {
            let file = await handles[0].getFile();

            if (file.size > 2*1024**2) {} else {
                let reader = new FileReader();
                reader.readAsArrayBuffer(file);

                reader.onload = () => {
                    let content = _arrayBufferToBase64(reader.result);

                    fetch("/api/design/?member=<?= $memberID ?>&type=upload", {
                        method: "post",
                        body: JSON.stringify({
                            file: content
                        })
                    }).then(() => {
                        location.reload();
                    });
                }

                reader.onerror = () => {}
            }
        }
    }
</script>

<br>
<div class="container">
    <div id="member-page" style="background-color: rgba(26,26,26,0.8);border-radius: 10px;padding:20px; backdrop-filter: blur(30px); -webkit-backdrop-filter: blur(30px);margin-top:<?= !isset($memberData["banner"]) ? "15vh" : "30vh" ?>;<?php if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/content/$memberID.html") && !($isLoggedIn && file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/content/$memberID-private.html"))): ?> padding-bottom: 0 !important;<?php endif; ?>">
        <?php require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/components/fullbanner.inc"; ?>
        <?php $member = $memberData; if (($isLoggedIn || $isLowerLoggedIn) && file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/ponies/" . $member["id"] . ".png")): ?>
        <div style="padding-top: 20px; padding-bottom: 20px;">
            <div style="background-color: rgba(200, 200, 200, .05); border-radius: 10px; padding: 10px 20px; overflow-x: scroll; display: flex; grid-gap: 20px;">
                <?php foreach ($designs as $id => $design): if (isset($design)): ?>
                <div style="display: grid; grid-template-rows: 208px 48px; width: max-content;">
                    <div style="display: flex; align-items: center; justify-content: center;">
                        <img src="data:image/png;base64,<?= $design["image"] ?>" style="height: 208px;">
                    </div>
                    <div style="text-align: center; margin-top: 5px; height: 48px; width: max-content;">
                        <b><input onkeyup="updateDesignName('<?= $id ?>');" maxlength="100" class="input-inherit" value="<?= $design["name"] ?>" id="design-<?= $id ?>-name"></b><br><input onkeyup="updateDesignNote('<?= $id ?>');" maxlength="100" class="input-inherit" value="<?= $design["note"] ?>" id="design-<?= $id ?>-note">
                    </div>
                </div>
                <?php endif; endforeach; ?>

                <div onclick="uploadNewDesign();" style="cursor: pointer; display: flex; height: 256px; align-items: center; justify-content: center; width: 64px;">
                    <img src="/assets/icons/add.svg" style="filter: invert(1); opacity: .5; width: 64px;">
                </div>
            </div>
        </div>
        <?php endif; ?>

        <div id="page-content">
            <?php if ($memberData["name"] === "unknown"): ?>
                <br>
                <div class="alert alert-secondary" style="margin-bottom: 0 !important;">
                    <p>Hello there!</p>
                    <p>I'm currently not totally sure who I am (it's a thing that can happen with plurality), but I am using this pony as a temporary identity to stay calm and not panic while I figure out what is going on and who I am.</p>
                    <p>I can either be an existing headmate who cannot work out they are fronting (this can sometimes happen when one of us gets pushed out of front), multiple headmates blurring who cannot work out who we are, a new pony trying to figure out their identity (this can sometimes take a while), or some other plurality shenanigans.</p>
                    <span>In all cases, feel free to ask!</span>
                </div>
                <br>
            <?php elseif ($memberData["name"] === "fusion"): ?>
                <br>
                <div class="alert alert-secondary" style="margin-bottom: 0 !important;">
                    <p><?= $lang["member"]["fusion"][0] ?></p>
                    <p><?= $lang["member"]["fusion"][1] ?></p>
                    <p><?= $lang["member"]["fusion"][2] ?></p>
                    <div class="list-group">
                        <?php $foundFusion = false; $fusionOn = false; foreach ($fusionRaindrops ? $frontersRaindrops['members'] : $frontersCloudburst['members'] as $fronter): if ($fronter["name"] !== "fusion"): if ($fusionOn): $foundFusion = true; $name = str_ends_with($fronter['name'], "-travelling") ? substr($fronter['name'], 0, strlen($fronter['name']) - 11) : $fronter['name'] ?>
                        <a class="list-group-item list-group-item-action text-black" href="/<?= $name ?>"><img src="<?= getAsset($system, $fronter["id"], "heads") ?>" style="filter:invert(1) hue-rotate(180deg);width:24px;"> <?= $fronter["display_name"] ?? $name ?></a>
                        <?php endif; else: $fusionOn = true; endif; endforeach; ?>
                    </div>
                    <?php if (!$foundFusion): ?>
                    <i><?= $lang["member"]["no_fusion"] ?></i>
                    <?php endif; ?>
                </div>
                <br>
            <?php else: ?>
                <?php if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/content/$memberID-private.html") && $isLoggedIn): ?>
                    <?php

                    $text = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/content/$memberID-private.html");
                    $censor = false;

                    if (str_contains(strtolower($text), "sex") || str_contains(strtolower($text), "nsfw") || str_contains(strtolower($text), "pleasure") || str_contains(strtolower($text), "dildo") || str_contains(strtolower($text), "dick") || str_contains(strtolower($text), "penis") || str_contains(strtolower($text), "vagina") || str_contains(strtolower($text), "pussy")) {
                        $censor = true;
                    }

                    if ($censor) {
                        echo("<a href='#' id='private-page-link' onclick='requestExplicit(\"refresh\"); showPrivate();'>Show private page (NSFW)</a><div id='private-page-hidden' style='display: none;'>" . $text . "</div>");
                    } else {
                        echo($text);
                    }

                    ?>
                    <?php if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/content/$memberID.html")): ?><hr><?php endif; ?>
                <?php endif; ?>

                <?php if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/content/$memberID.html")): ?>
                    <?php if (!$isLoggedIn || !file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/content/$memberID-private.html")) echo("<br>"); ?>
                    <?= file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/content/$memberID.html") ?>
                <?php endif; ?>
            <?php endif; ?>
        </div>
    </div>
</div>

<div class="container">
    <?php global $isLoggedIn; global $isLowerLoggedIn; if ($isLoggedIn || ($isLowerLoggedIn && $systemID === $app["other"]["id"])): ?>
        <hr>

        <details>
            <summary style="list-style: none;">
                <?php if ($systemID === $app["other"]["id"]): ?>
                <small style="opacity:.5;display:block;">(edit: <a href="/-/metadata/<?= $system ?>/<?= $memberData['name'] ?>">metadata</a>, <a href="/-/ponytown/<?= $memberData['id'] ?>">pony town</a>, <a href="/-/edit/<?= $system ?>/<?= $memberData['name'] ?>">page</a>)</small>
                <?php else: ?>
                <small style="opacity:.5;display:block;">(edit: <a href="/-/metadata/<?= $system ?>/<?= $memberData['name'] ?>">metadata</a>, <a href="/-/ponytown/<?= $memberData['id'] ?>">pony town</a>, <a href="/-/edit/<?= $system ?>/<?= $memberData['name'] ?>">public</a>, <a href="/-/edit-private/<?= $system ?>/<?= $memberData['name'] ?>">private</a>)</small>
                <?php endif; ?>
            </summary>
            <div class="alert alert-dark">
                <ul style="margin-bottom:0;">
                    <li><b>ID:</b> <code><?= $memberID ?></code> (<code><?= $systemID . "/" . $memberID ?></code>, <?= $memberData["name"] ?>)</li>
                    <li><b>Files:</b>
                        <ul>
                            <li><code><?= $_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/$memberID.json" ?></code> (<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/$memberID.json") ? filesize($_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/$memberID.json") . " bytes" : "not found" ?>)</li>
                            <li><code><?= $_SERVER['DOCUMENT_ROOT'] . "/includes/data/content/$memberID.html" ?></code> (<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/content/$memberID.html") ? filesize($_SERVER['DOCUMENT_ROOT'] . "/includes/data/content/$memberID.html") . " bytes" : "not found" ?>)</li>
                            <li><code><?= $_SERVER['DOCUMENT_ROOT'] . "/includes/data/content/$memberID-private.html" ?></code> (<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/content/$memberID-private.html") ? filesize($_SERVER['DOCUMENT_ROOT'] . "/includes/data/content/$memberID-private.html") . " bytes" : "not found" ?>)</li>
                        </ul>
                    </li>
                    <li><b>Date added:</b> <?= date('l j F Y', strtotime($memberData["created"])) ?> (<?= timeAgo($memberData["created"]) ?>, <code><?= $memberData["created"] ?></code>)</li>
                    <li><b>Pronouns:</b> <?= $memberData['pronouns'] ?></li>
                    <li><b>Color:</b> <span style="border:1px solid rgba(255, 255, 255, .5);background-color:#<?= $memberData["color"] ?? "ffffff" ?>;display:inline-block;width:16px;height:16px;border-radius:5px;vertical-align: middle;filter: invert(1) hue-rotate(180deg);"></span> <span style="vertical-align: middle;"><code>#<?= $memberData["color"] ?? "ffffff" ?></code></span>
                    <li><b>Reduced name:</b> <?= getMiniName($memberData["display_name"] ?? $member["name"]) ?></li>
                    <li>
                        <b>Metadata:</b>
                        <ul>
                            <?php foreach (parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/$memberID.json"), true)) as $name => $value): ?>
                            <li>
                                <b><?= $name ?></b>: <?php

                                if (is_bool($value)) {
                                    echo($value ? "true" : "false");
                                } else if (is_numeric($value)) {
                                    echo((string)$value);
                                } else if (is_string($value)) {
                                    echo("\"$value\"");
                                } else if (is_null($value)) {
                                    echo("null");
                                } else if (is_array($value) && array_keys($value) !== array_keys(array_keys($value))) { // Is associative ?>
                                <ul>
                                <?php foreach ($value as $name2 => $value2): ?>
                                    <li>
                                        <b><?= $name2 ?></b>: <?php
        
                                        if (is_bool($value2)) {
                                            echo($value2 ? "true" : "false");
                                        } else if (is_numeric($value2)) {
                                            echo((string)$value2);
                                        } else if (is_string($value2)) {
                                            echo("\"$value2\"");
                                        } else if (is_null($value2)) {
                                            echo("null");
                                        } else if (is_array($value2)) {
                                            echo("Array");
                                        } else {
                                            var_dump($value2);
                                        }
        
                                        ?>
                                    </li>
                                    <?php endforeach; ?>
                                </ul><?php
                                } else if (is_array($value) && array_keys($value) === array_keys(array_keys($value))) { // Is indexes ?>
                                    <ul>
                                    <?php foreach ($value as $value2): ?>
                                        <li>
                                            <?php

                                            if (is_bool($value2)) {
                                                echo($value2 ? "true" : "false");
                                            } else if (is_numeric($value2)) {
                                                echo((string)$value2);
                                            } else if (is_string($value2)) {
                                                echo("\"$value2\"");
                                            } else if (is_null($value2)) {
                                                echo("null");
                                            } else if (is_array($value2)) {
                                                echo("Array");
                                            } else {
                                                var_dump($value2);
                                            }

                                            ?>
                                        </li>
                                    <?php endforeach; ?>
                                    </ul><?php
                                } else if (is_array($value) && count($value) === 0) {
                                    echo("[]");
                                } else {
                                    var_dump($value);
                                }

                                ?>
                            </li>
                            <?php endforeach; ?>
                        </ul>
                    </li>
                </ul>
            </div>
        </details>
    <?php endif; ?>
</div>

<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/components/footer.inc'; ?>