<?php
require_once("helper.php");

if (isset($_GET["addUser"])) {
    if (checkAdduser($_GET["addUser"])) {
        echo <<<ENDE
        <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>Smarthome control</title>
            <link rel="icon" type="image/png" href="assets/img/favicon.png">
            <!--end::Accessibility Meta Tags-->

            <!--begin::Primary Meta Tags-->
            <meta name="title" content="Smarthome control" />
            <meta name="author" content="ColorlibHQ" />
            <meta name="description" content="Smarthome control panel by m0." />
            <meta name="keywords" content="smarthome dashboard, admin panel" />
            <!--end::Primary Meta Tags-->

            <!--begin::Fonts-->
            <link rel="stylesheet" href="assets/fonts/font_poppins.css" media="print" onload="this.media='all'" />
            <!--end::Fonts-->

            <!--begin::Third Party Plugin(OverlayScrollbars)
            <link rel="stylesheet" href="css/overlayscrollbars.min.css" />-->
            <!--end::Third Party Plugin(OverlayScrollbars)-->

            <!--begin::Third Party Plugin(Bootstrap Icons)-->
            <link rel="stylesheet" href="css/bootstrap-icons.min.css" />
            <!--end::Third Party Plugin(Bootstrap Icons)-->

            <!--begin::Required Plugin(AdminLTE)-->
            <link rel="stylesheet" href="./css/adminlte.css?v=2" />
            <!--end::Required Plugin(AdminLTE)-->


        </head>
        <body onload="createRegistration()">
        </body>
        <script src="js/auth.js"></script>
        <script>
        async function createRegistration() {
            try {
                // check browser support
                if (!window.fetch || !navigator.credentials || !navigator.credentials.create) {
                    throw new Error('Browser not supported.');
                }
                let keyName = encodeURIComponent(prompt('Bitte Hier den Namen des Schlüssels eingeben:'));
                // get create args
                let rep = await window.fetch('authServer.php?fn=getCreateArgs', {method:'GET', cache:'no-cache'});
                //alert(await rep.text());
                const createArgs = await rep.json();
                // error handling
                if (createArgs.success === false) {
                    throw new Error(createArgs.msg || 'unknown error occured');
                }

                // replace binary base64 data with ArrayBuffer. a other way to do this
                // is the reviver function of JSON.parse()
                recursiveBase64StrToArrayBuffer(createArgs);

                // create credentials
                const cred = await navigator.credentials.create(createArgs);

                // create object
                const authenticatorAttestationResponse = {
                    transports: cred.response.getTransports  ? cred.response.getTransports() : null,
                    clientDataJSON: cred.response.clientDataJSON  ? arrayBufferToBase64(cred.response.clientDataJSON) : null,
                    attestationObject: cred.response.attestationObject ? arrayBufferToBase64(cred.response.attestationObject) : null
                };

                // check auth on server side
                rep = await window.fetch('authServer.php?fn=processCreate&name='+keyName, {
                    method  : 'POST',
                    body    : JSON.stringify(authenticatorAttestationResponse),
                    cache   : 'no-cache'
                });
                authenticatorAttestationServerResponse = await rep.json();
                // prompt server response
                if (authenticatorAttestationServerResponse.success) {
                    window.alert(authenticatorAttestationServerResponse.msg || 'registration success');
                    if(!authenticatorAttestationServerResponse.msg){
                        window.location.href = "https://nas.el-wa.org/smart";
                    }

                } else {
                    throw new Error(authenticatorAttestationServerResponse.msg);
                }

            } catch (err) {
                window.alert(err.message || 'unknown error occured');
            }
        }
        </script>
        </html>
        ENDE;
    }
} else if (checkLogin()) {
    
    include "restricted/header.php";

    if(!isset($_GET["action"])){
        $_GET["action"] = "solar";
    }
    $resource_content = "";
    switch($_GET["action"]){
        case "solar":
            $resource_content .= str_replace("%%INSERTSVG%%", file_get_contents('assets/img/realtime.svg'), file_get_contents('restricted/solar.html'));
            $resource_content .= file_get_contents('restricted/footer.html');
            $resource_content .= "<script src='js/solar/solarMQTT.js'></script>";
            break;
        case "home":
            include "restricted/home.php";
            $resource_content .= file_get_contents('restricted/footer.html');
            $resource_content .= "<script src='js/solar/autoActionFuncs.js'></script>";
            $resource_content .= "<script src='js/solar/homeMQTT.js'></script>";
            break;
        case "heat":
            $resource_content .= file_get_contents('restricted/heat.html');
            $resource_content .= file_get_contents('restricted/footer.html');
            $resource_content .= "<script src='js/solar/heatMQTT.js'></script>";
            break;
        case "history":
            $resource_content .= file_get_contents('restricted/history.html');
            $resource_content .= file_get_contents('restricted/footer.html');
            $resource_content .= "<script src='js/solar/historyMQTT.js'></script>";
            break;
    }
    
    

    echo $resource_content;
} else {
    echo <<<ENDE
<html>
<head><link rel="icon" type="image/png" href="assets/img/favicon.png"></head>
<body onload="checkRegistration()">
<script src="js/auth.js"></script>
</body>
</html>
ENDE;
}
