<?php
// ini_set('display_errors', '1');
// ini_set('display_startup_errors', '1');
// error_reporting(E_ALL);

require_once(__DIR__."/php/federation-service/config.php");
require_once(__DIR__."/php/federation-service/services/api-service.php");

/* ---------- Security helpers ---------- */
function e($s) {
    return htmlspecialchars((string)$s, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}

function safe_url($u) {
    $u = trim((string)$u);
    if (!filter_var($u, FILTER_VALIDATE_URL)) return '#';
    $scheme = strtolower((string)parse_url($u, PHP_URL_SCHEME));
    return in_array($scheme, ['http','https'], true) ? $u : '#';
}

function safe_css_url($u) {
    $u = safe_url($u);
    // Wrap in single quotes and escape existing single quotes to keep CSS valid.
    return "'" . str_replace("'", "\\'", $u) . "'";
}

function sanitize_nickname($s) {
    // Only allow simple partner nicknames: letters, numbers, underscore, dash.
    return preg_replace('/[^a-z0-9_-]/i', '', (string)$s);
}

/* ---------- Input & data fetch ---------- */
$apiService = new ApiService(Config::FEDERATION_ENDPOINT);

$partnerName = isset($_GET['name']) ? sanitize_nickname($_GET['name']) : '';
$peerEndpoint = null;

try {
    $peers = $apiService->getPeers();
} catch (Throwable $e) {
    http_response_code(502);
    exit('Upstream error.');
}

/* Resolve nickname strictly from known peers; do NOT derive an endpoint from raw input */
if ($partnerName !== '') {
    foreach ($peers as $p) {
        if (strcasecmp(sanitize_nickname($p->nickName), $partnerName) === 0) {
            $peerEndpoint = (string)$p->endpoint;
            break;
        }
    }
}

if ($peerEndpoint === null) {
    http_response_code(404);
    exit('Unknown partner.');
}

try {
    $peer = $apiService->getPeer($peerEndpoint);
} catch (Throwable $e) {
    http_response_code(502);
    exit('Partner data unavailable.');
}

$peerLogo = e(safe_url($peer->logo ?? ''));
$peerFullName = e($peer->fullName ?? '');
$peerDesc = trim((string)($peer->description ?? ''));
$peerHero = e(safe_url($peer->heroImage ?? ''));
$svcHero = e(safe_url($peer->peerService->heroImage ?? ''));
$svcDesc = trim((string)($peer->peerService->description ?? ''));
$endpoints = is_array($peer->peerService->endpoints ?? null) ? $peer->peerService->endpoints : [];
?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>EarthServer</title>
    <meta name="description" content="EarthServer">
    <meta property="og:title" content="EarthServer" />
    <meta property="og:description" content="EarthServer" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <!-- Fonts/Icons (consider self-hosting for stricter CSP) -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">

    <link href="css/general.css" rel="stylesheet" type="text/css">
    <link href="css/demo.css" rel="stylesheet" type="text/css">
    <link rel="icon" href="img/favicon.ico">

    <script src="js/prescript.js"></script>
    <script src="js/vendor/modernizr.js"></script>

    <link href="css/general.css" rel="preload" as="style">
    <link href="css/demo.css" rel="preload" as="style">
    <link href="js/vendor/plugins.js" rel="preload" as="script">
    <link href="js/core.js" rel="preload" as="script">
    <link href="js/vendor/noty.js" rel="preload" as="script">
    <link href="js/gallery.js" rel="preload" as="script">
    <link href="js/menu.js" rel="preload" as="script">
    <link href="js/app.js" rel="preload" as="script">

    <style>
        .flex-container { display: flex; justify-content: center; flex-wrap: wrap; gap: 50px; }
        .flex-container > div { width: 500px; }
        .partner-service-hero-image { max-width: 100%; height: auto; }
    </style>

    <meta name="theme-color" content="#0074D9">
</head>

<body id="body" class="body">
    <div id="animsition" class="animsition">

        <div class="menu">
            <nav class="navbar navbar-fixed-top navbar-transparent-inverse">
                <div class="container">
                    <div class="navbar-header">
                        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                            <span class="button-icon-default">&#9776;</span>
                        </button>
                        <div class="logo-wrapper">
                            <a href="index.php">
                                <img src="img/logo.png" alt="EarthServer" class="style-logo" />
                            </a>
                        </div>
                    </div>
                    <nav class="navbar-collapse collapse style-navbar">
                        <ul class="nav navbar-nav">
                            <li><a href="index.php#about" data-scroll>About</a></li>
                            <li><a href="index.php#enter" data-scroll>Enter</a></li>
                            <li><a href="index.php#members" data-scroll>Members</a></li>
                            <li><a href="index.php#join" data-scroll>Join</a></li>
                            <li><a href="index.php#terms" data-scroll>Terms</a></li>
                            <div class="style-globe">
                                <script type="text/javascript" src="//rf.revolvermaps.com/0/0/2.js?i=3fcivckc1cn&amp;m=5&amp;s=88&amp;c=ff0000&amp;t=1" async="async"></script>
                            </div>
                        </ul>
                    </nav>
                </div>
            </nav>
        </div>

        <!-- begin main content -->

        <div class="style-heading-center-top" style="height:40vh">
            <div class="logo text-logo">
                <span class="style-heading-text">
                    <?php if ($peerLogo !== '#'): ?>
                        <img src="<?= $peerLogo ?>" height="100" alt="">
                        <br/>
                    <?php endif; ?>
                    <?= $peerFullName ?>
                </span>
                <br/>
                <span class="style-heading-secondline">EarthServer Datacube Federation Member</span>
            </div>
        </div>

        <div style="background: url('img/bg.jpg') no-repeat; background-size: 100%; height: 85vh; width: 100%;" data-parallax="scroll" data-speed="0.6"></div>

        <div class="container style-content">
            <div class="pages margin-small index-list">
                <h2 class="style-fancy-heading text-center">About</h2>
                <div class="image-half block-medium-alt-even">
                    <div class="row">
                        <div class="col-sm-6 image-half-info">
                            <div class="image-half-info-inner">
                                <p class="lead-alt content" style="margin-top: -30px;">
                                    <?php if ($peerDesc !== ''): ?>
                                        <?= $peerDesc ?>
                                    <?php endif; ?>
                                </p>
                            </div>
                        </div>
                        <div class="col-sm-6 image-half-info">
                            <?php if ($peerHero !== '#'): ?>
                                <img src="<?= $peerHero ?>" style="max-width: 100%; margin-top: 30px;" alt="">
                            <?php endif; ?>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <div class="pages-demo-bg style-heading-background-small" data-parallax="scroll" data-speed="0.6"></div>

        <div class="container style-content">
            <div class="pages margin-small index-list">
                <h2 class="style-fancy-heading text-center"><i class="fa fa-cube"></i> Datacube Offering</h2>
                <div class="icon-box icon-box-centered">
                    <div class="row">
                        <div class="col-sm-6">
                            <div class="icon-anim-1a-black">
                                <div class="image-wrapper">
                                    <?php if ($svcHero !== '#'): ?>
                                        <img src="<?= $svcHero ?>" class="partner-service-hero-image" alt="">
                                    <?php endif; ?>
                                </div>
                            </div>
                        </div>
                        <div class="col-sm-6">
                            <div class="icon-anim-1a-black">
                                <div class="icon-box-content">
                                    <p class="lead-alt content">
                                        <?php if ($svcDesc !== ''): ?>
                                            <?= $svcDesc ?>
                                        <?php endif; ?>
                                    </p>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <div class="pages-demo-bg style-heading-background-small" data-parallax="scroll" data-speed="0.6"></div>

        <div class="container style-content">
            <h2 class="style-fancy-heading text-center"><i class="fa fa-cogs"></i> Service Access</h2>
            <div class="icon-box icon-box-default icon-box-centered">
                <div class="row flex-container">
                    <?php foreach ($endpoints as $endpointObj): ?>
                        <?php
                            // Defensive reads with defaults
                            $bg      = safe_css_url($endpointObj['background-image'] ?? '');
                            $urlHref = e(safe_url($endpointObj['url'] ?? '#'));
                            $title   = e($endpointObj['title'] ?? '');
                            $short   = e($endpointObj['short-description'] ?? '');

                            // Icon allow-list: only accept "fa-..." tokens
                            $iconRaw = (string)($endpointObj['icon'] ?? '');
                            $icon    = preg_match('/^fa-[a-z0-9-]{1,40}$/i', $iconRaw) ? $iconRaw : 'fa-cube';
                            $icon    = e($icon);
                        ?>
                        <div class="icon-anim-3a-black icon-box-wrapper-border icon-box-wrapper-bg m-b-md"
                             style="background-image:url(<?= $bg ?>);background-size:cover;resize:both">
                            <a href="<?= $urlHref ?>" rel="noopener noreferrer">
                                <div class="icon-wrapper">
                                    <i class="fa <?= $icon ?> icon circle-block" aria-hidden="true"></i>
                                </div>
                            </a>
                            <div class="icon-box-content">
                                <h3 class="heading h4"><b><?= $title ?></b></h3>
                                <p class="content"><?= $short ?></p>
                            </div>
                        </div>
                    <?php endforeach; ?>
                </div>
            </div>
        </div>

        <!-- end main content -->

    </div>

    <div class="copyright p-t p-b">
        <div class="container">
            <p class="copyright-text text-center copyright-footer">
                Copyright &copy; <?= date("Y"); ?> &nbsp;
                <a href="http://www.constructor.university/">Constructor University</a> &nbsp; &amp; &nbsp;
                <a href="http://www.rasdaman.com/">rasdaman GmbH</a>
            </p>
        </div>
    </div>

    <script src="js/vendor/plugins.js"></script>
    <script src="js/core.js"></script>
</body>
</html>
