<?php

/**
 * Main entry point for site.
 */

declare(strict_types=1);

use RedBeanPHP\R;
use Poduptime\ServerStatus;
use RedBeanPHP\RedException;

require_once __DIR__ . '/boot.php';

$hiddensoftwares = readListedSoftware(true, true);
$hiddendomains   = readListedDomain(true);
$maximumoftwares = (int) $_SERVER['MAX_COUNT_SOFTWARES'];
$input           = isset($_GET['input']) ? urldecode(substr($_GET['input'], 1)) : null;
$mapview         = isset($_GET['map']) || $input === 'map';
$search          = isset($_GET['search']) || $input === 'search';
if ($search) {
    include_once __DIR__ . '/app/views/search.php';
    return;
}
$go              = isset($_GET['go']) || $input === 'go';
$listview        = isset($_GET['list']) || $input === 'list';
$termsview       = isset($_GET['terms']) || $input === 'terms';
$statsview       = isset($_GET['stats']) || $input === 'stats';
$allsoftwares    = isset($_GET['allsoftwares']) || $input === 'allsoftwares';
$history         = isset($_GET['history']) || $input === 'history';
$dailystatsview  = isset($_GET['dailystats']) || $input === 'dailystats';
$fedistatsview   = isset($_GET['fediversestats']) || $input === 'fediversestats';
$serveradmin     = isset($_GET['serveradmin']) || $input === 'serveradmin';
$apikey          = isset($_GET['apikey']) || $input === 'apikey';
$serveradminedit = isset($_GET['serveradminedit']) || $input === 'serveradminedit';
$edit            = isset($_GET['edit']) || $input === 'edit';
$add             = isset($_POST['add']) || $input === 'add';
$badge           = isset($_POST['generate']) || $input === 'generate';
$gettoken        = isset($_POST['gettoken']) || $input === 'gettoken';
$getapikey       = isset($_POST['getapikey']) || $input === 'getapikey';
$admin           = isset($_GET['admin']) || $input === 'admin';
$status          = isset($_GET['status']) || $input === 'status';
$simpleview      = !($mapview || $serveradmin || $serveradminedit || $statsview);
$fullview        = false;
$subdomain       = join('.', explode('.', $_SERVER['HTTP_HOST'], -2));
$software_toggle = !empty($subdomain) ? $subdomain : 'All';
$software        = !empty($subdomain) ? ucwords($subdomain) : 'Fediverse';
$softwarejs      = !empty($subdomain) ? ucwords($subdomain) : '';
$softwaredb      = !empty($subdomain) ? $subdomain : 'all';
$software_all    = !empty($subdomain) ? ucwords($subdomain) : 'Fediverse';
$softwaren       = !empty($subdomain) ? '&software=' . $subdomain : '';


if ($go) {
    include_once __DIR__ . '/app/helpers/go.php';
}

$softwares = R::getAll('
    SELECT softwarename, users
    FROM piecharts_software
    WHERE softwarename IS NOT NULL
    AND users IS NOT NULL
    GROUP BY softwarename, users
    ORDER BY users desc, softwarename
    LIMIT ?
', [$maximumoftwares]);

?>
<!doctype html>
<html lang="en" class="h-100">
<head>
    <link rel="preconnect" href="<?php echo $_SERVER['CDN_DOMAIN'] ?>">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="keywords" content="fediverse, lemmy, friendica, mastodon, peertube, pixelfed, misskey, loops, peertube, ghost">
    <meta name="description" content="We observe all Fediverse Sites. Find a <?php echo $software ?> site to sign up for, find one close to you using a list, map or let us auto-pick one for you!">
    <link rel="icon" href="<?php echo $_SERVER['CDN_DOMAIN'] ?>/app/assets/favicon.ico" type="image/x-icon">
    <link rel="preload" href="<?php echo $_SERVER['CDN_DOMAIN'] ?>/app/assets/main.min.css" as="style">
    <link rel="stylesheet" href="<?php echo $_SERVER['CDN_DOMAIN'] ?>/app/assets/main.min.css">
    <?php
    if ((!$statsview) && (!$dailystatsview) && (!$listview)) {
            $uri_parts        = parse_url($_SERVER['REQUEST_URI']);
            $request_uri_path = $uri_parts['path'];
            print_r('<link rel="canonical" href="https://' . $_SERVER["DOMAIN"] . $request_uri_path . '">');
    }
    ?>
    <script defer src="<?php echo $_SERVER['CDN_DOMAIN'] ?>/node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
    <meta property="og:url" content="https://<?php echo $_SERVER['HTTP_HOST'] ?>/<?php echo $input ?>">
    <meta property="og:title" content="<?php echo $_SERVER['LONG_TITLE'] ?>">
    <meta property="og:type" content="website">
    <meta property="og:description" content="<?php echo $software ?> Sites Status. Find a <?php echo $software ?> server to sign up for, find one close to you!">
    <title><?php echo $_SERVER['TITLE'] ?> | <?php echo $software ?> Sites Status</title>
</head>
<body class="d-flex flex-column h-100">
<input type="hidden" name="apiurl" value="<?php echo $_SERVER['API_LOCATION'] ?>">
    <nav class="shadow sticky-top navbar navbar-expand-lg navbar-dark">
        <div class="container-fluid">
        <a class="text-light navbar-brand fw-bold ms-2" href="/"><?php echo $_SERVER['TITLE'] ?></a>
        <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
            <div class="navbar-toggler-icon"></div>
        </button>
        <div class="collapse navbar-collapse" id="navbarNavDropdown">
            <ul class="navbar-nav ms-auto my-auto">
                <li class="nav-item text-white my-auto fst-italic fw-bold me-lg-2">
                    <?php echo $t->trans('base.general.servers') ?>:
                </li>
                <li class="nav-item my-auto">
                    <a class="text-white nav-link" href="/list"><?php echo $t->trans('base.navs.list') ?></a>
                </li>
                <li class="nav-item my-auto">
                    <a class="text-white nav-link" href="/map"><?php echo $t->trans('base.navs.map') ?></a>
                </li>
                <li class="nav-item my-auto me-lg-5">
<?php
if (empty($subdomain)) {
                echo '<a href="/go" class="text-white nav-link" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-custom-class="custom-tooltip" title="' . $t->trans('base.strings.list.navs.autotip', ['%(software)' => $softwarejs]) . '">' . $t->trans('base.strings.list.navs.auto') . '</a>';
} else {
                echo '<a href="/go' . $softwaren . '" class="text-white nav-link" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-custom-class="custom-tooltip" title="' . $t->trans('base.strings.list.navs.autotip', ['%(software)' => $softwarejs]) . '">' . $t->trans('base.strings.list.navs.auto') . '</a>';
}
?>
                </li>
                <li class="nav-item text-white my-auto fst-italic fw-bold me-lg-2">
                    <?php echo $t->trans('base.navs.stats') ?>:
                </li>
                <li class="nav-item my-auto">
                    <a href="/stats" class="text-white nav-link"><?php echo $t->trans('base.navs.monthlystats') ?></a>
                </li>
                <li class="nav-item my-auto">
                    <a href="/dailystats" class="text-white nav-link"><?php echo $t->trans('base.navs.dailystats') ?></a>
                </li>
                <li class="nav-item my-auto me-lg-5">
                    <a href="/fediversestats" class="text-white nav-link"><?php echo $t->trans('base.navs.fediversestats') ?></a>
                </li>
                <div class="text-white navbar-text my-auto fst-italic fw-bold me-lg-2" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-custom-class="custom-tooltip" title="<?php echo $t->trans('base.strings.list.navs.filter') ?>">
                <?php echo $t->trans('base.navs.software') ?>:
                </div>
                <li class="nav-item dropdown my-auto me-lg-5" >
                    <a class="text-white nav-link dropdown-toggle" href="#" id="navbarDropdownMenuSoftwares" data-bs-toggle="dropdown" role="button" aria-expanded="false">
                        <?php echo $software_toggle ?>
                    </a>
                    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuSoftwares">
                        <a class="dropdown-item" href="//<?php echo $_SERVER['DOMAIN'] . strtok($_SERVER["REQUEST_URI"], '?') ?>">All</a>
                    <?php
                    foreach ($softwares as $software) {
                            printf(
                                '<a class="dropdown-item" href="//%1$s.' . $_SERVER['DOMAIN'] . strtok(urldecode($_SERVER["REQUEST_URI"]), '?') . '">%1$s</a> ',
                                $software['softwarename']
                            );
                    }
                    ?>
                        <a href="/allsoftwares"><?php echo $t->trans('base.navs.more') ?></a>
                    </div>
                </li>
            </ul>
            <form id="dosearch" class="d-flex ms-auto">
                <input id="search" class="form-control me-2" name="query" type="search" placeholder="<?php echo $t->trans('base.navs.search') ?>" aria-label="Search" >
            </form>
        </div>
        </div>
    </nav>
<main class="flex-shrink-0">
    <div class="main">
        <?php
        if ($mapview) {
            include_once __DIR__ . '/app/views/showmap.php';
        } elseif ($statsview) {
            printf('<script src="' . $_SERVER['CDN_DOMAIN'] . '/node_modules/chart.js/dist/chart.umd.js"></script>');
            include_once __DIR__ . '/app/views/monthlystatsview.php';
        } elseif ($dailystatsview) {
            printf('<script src="' . $_SERVER['CDN_DOMAIN'] . '/node_modules/chart.js/dist/chart.umd.js"></script>');
            include_once __DIR__ . '/app/views/dailystatsview.php';
        } elseif ($fedistatsview) {
            printf('<script src="' . $_SERVER['CDN_DOMAIN'] . '/node_modules/chart.js/dist/chart.umd.js"></script>');
            include_once __DIR__ . '/app/views/fediversestatsview.php';
        } elseif ($termsview) {
            include_once __DIR__ . '/app/views/termsview.php';
        } elseif ($listview) {
            printf('<script src="' . $_SERVER['CDN_DOMAIN'] . '/node_modules/jquery/dist/jquery.min.js"></script>');
            printf('<script src="' . $_SERVER['CDN_DOMAIN'] . '/node_modules/bootstrap-table/dist/bootstrap-table.min.js"></script>');
            printf('<script src="' . $_SERVER['CDN_DOMAIN'] . '/node_modules/bootstrap-table/dist/extensions/filter-control/bootstrap-table-filter-control.js"></script>');
            include_once __DIR__ . '/app/views/showfull.php';
        } elseif ($history) {
            printf('<script src="' . $_SERVER['CDN_DOMAIN'] . '/node_modules/jquery/dist/jquery.min.js"></script>');
            printf('<script src="' . $_SERVER['CDN_DOMAIN'] . '/node_modules/bootstrap-table/dist/bootstrap-table.min.js"></script>');
            printf('<script src="' . $_SERVER['CDN_DOMAIN'] . '/node_modules/bootstrap-table/dist/extensions/filter-control/bootstrap-table-filter-control.js"></script>');
            include_once __DIR__ . '/app/views/history.php';
        } elseif ($serveradmin || $badge) {
            include_once __DIR__ . '/app/views/serveradmin.php';
        } elseif ($apikey) {
            include_once __DIR__ . '/app/views/getapikey.php';
        } elseif ($allsoftwares) {
            include_once __DIR__ . '/app/views/allsoftwares.php';
        } elseif ($admin && $_GET['adminkey'] == $_SERVER['ADMIN_KEY']) {
            include_once __DIR__ . '/app/views/admin.php';
        } elseif ($status) {
            include_once __DIR__ . '/app/views/status.php';
        } elseif ($edit) {
            include_once __DIR__ . '/app/functions/edit.php';
        } elseif ($add) {
            include_once __DIR__ . '/app/functions/add.php';
        } elseif ($gettoken) {
            include_once __DIR__ . '/app/functions/gettoken.php';
        } elseif ($getapikey) {
            include_once __DIR__ . '/app/functions/apikey.php';
        } elseif ($input) {
            printf('<script src="' . $_SERVER['CDN_DOMAIN'] . '/node_modules/chart.js/dist/chart.umd.js"></script>');
            printf('<script src="' . $_SERVER['CDN_DOMAIN'] . '/node_modules/jquery/dist/jquery.min.js"></script>');
            printf('<script src="' . $_SERVER['CDN_DOMAIN'] . '/node_modules/bootstrap-table/dist/bootstrap-table.min.js"></script>');
            include_once __DIR__ . '/app/views/singleview.php';
        } else {
            include_once __DIR__ . '/app/views/welcome.php';
        }
        ?>
    </div>
</main>
<footer class="text-center text-lg-start bg-body-tertiary text-muted text-lblue">
    <section class="d-flex justify-content-center justify-content-lg-between p-4 border-bottom">
    </section>
    <section class="">
        <div class="container text-center text-md-start mt-5 text-lblue">
            <div class="row mt-3">
                <div class="col-md-3 col-lg-4 col-xl-3 mx-auto mb-4">
                    <?php
                    $csoftwares = c('softwares');
                    foreach ($csoftwares as $csoftware => $details) {
                        if ($csoftware === $subdomain && $details['info']) {
                            echo '<div class="row">
                                                      <h5 class="text fw-bold d-flex justify-content-center">
                                                      <a class="white d-flex justify-content-center" target="_new" href="' . $details['info'] . '">About ' . $subdomain . '</a></h5><p class="d-flex justify-content-center">';
                            echo $t->trans('softwares.' . $subdomain);
                            echo '</p></div>';
                        }
                    }
                    echo '
                    <div class="row d-flex justify-content-center">
                    <h4 class="text fw-bold d-flex justify-content-center">About ' . $_SERVER['TITLE'] . '</h4>
                    <p class="d-flex justify-content-center">' . $t->trans('base.strings.about', ['%(sitename)' => $_SERVER['TITLE']]) . '</p>
                    </div>
                    ';
                    ?>
                </div>
                <div class="col-md-3 col-lg-2 col-xl-2 mx-auto mb-4">
                    <h5 class="text-uppercase fw-bold mb-4">
                        <?php echo $t->trans('base.navs.administrators') ?>
                    </h5>
                    <p>
                        <a href="/serveradmin" class="text-reset"><?php echo $t->trans('base.navs.admin') ?></a>
                    </p>
                    <p>
                        <a href="/history" class="text-reset"><?php echo $t->trans('base.navs.history') ?></a>
                    </p>
                    <p>
                        <a href="/serveradmin" class="text-reset"><?php echo $t->trans('base.navs.badge') ?></a>
                    </p>
                    <p>
                        <a href="<?php echo $_SERVER['SERVER_HELP_URL'] ?>" class="text-reset"><?php echo $_SERVER['SERVER_HELP_TEXT'] ?></a>
                    </p>
                </div>
                <div class="col-md-3 col-lg-2 col-xl-2 mx-auto mb-4">
                    <h5 class="text-uppercase fw-bold mb-4">
                        <?php echo $t->trans('base.navs.links') ?>
                    </h5>
                    <p>
                        <a href="/status" class="text-reset"><?php echo $t->trans('base.navs.status') ?></a>
                    </p>
                    <p>
                        <a href="<?php echo $_SERVER['API_LOCATION'] ?>" class="text-reset"><?php echo $t->trans('base.navs.api') ?></a> | <a href="https://<?php echo $_SERVER['DOMAIN'] ?>/apikey" class="text-reset"><?php echo $t->trans('apikey.key') ?></a>
                    </p>
                    <p>
                        <a href="/terms" class="text-reset"><?php echo $t->trans('base.navs.terms') ?></a>
                    </p>
                    <p>
                        <a href="https://gitlab.com/diasporg/poduptime" class="text-reset"><?php echo $t->trans('base.navs.source') ?></a>
                    </p>
                </div>
                <div class="col-md-3 col-lg-2 col-xl-2 mx-auto mb-4">
                    <h5 class="text-uppercase fw-bold mb-4"><?php echo $t->trans('base.navs.connect') ?></h5>
                    <p>
                        <a class="text-reset text-white" href="<?php echo $_SERVER['SOCIAL_LINK_ONE'] ?>"><?php echo $_SERVER['SOCIAL_LINK_ONE_DESC'] ?></a>
                    </p>
                    <p>
                        <a class="text-reset text-white" href="<?php echo $_SERVER['SOCIAL_LINK_TWO'] ?>"><?php echo $_SERVER['SOCIAL_LINK_TWO_DESC'] ?></a>
                    </p>
                </div>
            </div>
        </div>
    </section>
    <div class="text-center p-4 text-lblue" style="background-color: rgba(0, 0, 0, 0.05);">
        © 2011 Copyright:
        <a class="text-reset fw-bold" href="https://gitlab.com/diasporg/poduptime/-/blob/main/COPYRIGHT">Poduptime</a>
    </div>
    <div class="toast-container position-fixed top-0 mt-3 ms-3">
        <div id="liveToast" class="toast text-bg-primary" role="alert" aria-live="assertive" aria-atomic="true">
            <div class="toast-header">
                <div class="me-auto"><?php echo $t->trans('base.general.notice') ?></div>
                <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
            </div>
            <div class="toast-body text-dark-emphasis" id="42">
            </div>
        </div>
    </div>
    <div class="modal fade" id="searchModal" tabindex="-1" role="dialog" aria-labelledby="searchModal" aria-hidden="true">
        <div class="modal-dialog modal-dialog-centered modal-xl" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title" id="exampleModalLongTitle">Search Results</h5>
                </div>
                <div class="modal-body" id="searchresults">
                    ...
                </div>
            </div>
        </div>
    </div>

<?php
$statsview && include_once __DIR__ . '/app/views/monthlystatsviewjs.php';
$dailystatsview && include_once __DIR__ . '/app/views/dailystatsviewjs.php';
$fedistatsview && include_once __DIR__ . '/app/views/fediversestatsviewjs.php';
?>

    <script>
        const form = document.getElementById('dosearch');

        form.addEventListener('submit', async (evt) => {
            evt.preventDefault();
            const formData = new FormData(form);
            const params = new URLSearchParams(formData);
            const response = await fetch('/search?' + params.toString());
            const data = await response.text();
            const myModalElement = document.getElementById('searchModal');
            const modal = new bootstrap.Modal(myModalElement);
            const element = document.getElementById('searchresults');
            element.innerHTML = data;
            modal.show();
        });
        window.addEventListener('load', function () {
            var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
            var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
                return new bootstrap.Tooltip(tooltipTriggerEl)
            })
        });
    </script>
<link rel="preload" href="<?php echo $_SERVER['CDN_DOMAIN'] ?>/app/assets/second.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
</body></html>

