<!DOCTYPE html>
<html>
    <head>
        <!-- Notes: This should be open in its original path-->
        <meta charset="utf-8">
        <meta name="zoraxy.csrf.Token" content="{{.csrfToken}}">
        <link rel="stylesheet" href="../script/semantic/semantic.min.css">
        <script src="../script/jquery-3.6.0.min.js"></script>
        <script src="../script/semantic/semantic.min.js"></script>
        <script src="../script/utils.js"></script>
    </head>
    <body>
        <link rel="stylesheet" href="../darktheme.css">
        <script src="../script/darktheme.js"></script>
        <br>
        <div class="ui container">
            <div class="ui header">
                <div class="content">
                    Alias Hostname
                    <div class="sub header epname"></div>
                </div>
            </div>
            <div class="ui divider"></div>
            <div class="scrolling content ui form">
                <div id="inlineEditBasicAuthCredentials" class="field">
                    <p>Enter alias hostname or wildcard matching keywords for <code class="epname"></code></p>
                    <table class="ui very basic compacted unstackable celled table">
                        <thead>
                        <tr>
                            <th>Alias Hostname</th>
                            <th>Remove</th>
                        </tr></thead>
                        <tbody id="inlineEditTable">
                        <tr>
                            <td colspan="2"><i class="ui green circle check icon"></i> No Alias Hostname</td>
                        </tr>
                        </tbody>
                    </table>
                    <div class="ui divider"></div>
                    <div class="three small fields">
                        <div class="field">
                            <label>Alias Hostname</label>
                            <input id="aliasHostname" type="text" placeholder="alias.mydomain.com" autocomplete="off">
                            <small>Support wildcards e.g. alias.mydomain.com or *.alias.mydomain.com</small>
                        </div>
                        <div class="field" >
                            <button class="ui basic button" onclick="addAliasToRoutingRule();"><i class="green add icon"></i> Add Alias</button>
                        </div>
                        <div class="ui divider"></div>
                    </div>
                </div>
            </div>
            <div class="ui divider"></div>
            <div class="field" >
                <button class="ui basic button"  style="float: right;" onclick="closeThisWrapper();">Close</button>
            </div>
        </div>
            
        <br><br><br><br>

        </div>
        <script>
            let aliasList = [];
            let editingEndpoint = {};

            if (window.location.hash.length > 1){
                let payloadHash = window.location.hash.substr(1);
                try{
                    payloadHash = JSON.parse(decodeURIComponent(payloadHash));
                    $(".epname").text(payloadHash.ep);
                    editingEndpoint = payloadHash;
                }catch(ex){
                    console.log("Unable to load endpoint data from hash")
                }
            }

            function initAliasNames(){
                $.cjax({
                    url: "/api/proxy/detail",
                    method: "POST",
                    data: {
                        "type":"host",
                        "epname": editingEndpoint.ep
                    },
                    success: function(data){
                        if (data.error != undefined){
                            //This endpoint not exists?
                            alert(data.error);
                            return;
                        }else{
                            $("#inlineEditTable").html("");
                            if (data.MatchingDomainAlias != undefined){
                                aliasList = data.MatchingDomainAlias;
                                renderAliasList();
                            }else{
                                //Assume no alias
                                $("#inlineEditTable").html(`<tr>
                                    <td colspan="2"><i class="ui green circle check icon"></i> No Alias Hostname</td>
                                </tr>`);
                            }

                            
                        }
                    }
                })
            }
            initAliasNames();

            function removeAliasDomain(targetDomain){
                aliasList.splice(aliasList.indexOf(targetDomain), 1);
                saveCurrentAliasList(function(data){
                    if (data.error != undefined){
                        parent.msgbox(data.error);
                    }else{
                        initAliasNames();
                        parent.msgbox("Alias hostname removed")
                    }
                });
            }

            function addAliasToRoutingRule(){
                let newAliasHostname = $("#aliasHostname").val().trim();
                aliasList.push(newAliasHostname);
                $("#aliasHostname").val("");
                saveCurrentAliasList(function(data){
                    if (data.error != undefined){
                        parent.msgbox(data.error);
                    }else{
                        parent.msgbox("New alias hostname added")
                        initAliasNames();
                    }
                    
                });
            }

            function saveCurrentAliasList(callback=undefined){
                $.cjax({
                    url: "/api/proxy/setAlias",
                    method: "POST",
                    data:{
                        "ep":editingEndpoint.ep,
                        "alias": JSON.stringify(aliasList)
                    },
                    success: function(data){
                        if (callback != undefined){
                            callback(data);
                        }

                        if (data.error == undefined && parent != undefined && parent.document != undefined){
                            //Try to update the parent object's rules if exists
                            parent.updateAliasListForEndpoint(editingEndpoint.ep, aliasList);
                        }
                    }
                })
            }

            function renderAliasList(){
                $("#inlineEditTable").html("");
                aliasList.forEach(aliasDomain => {
                    let domainLink = `<a href="//${aliasDomain}" target="_blank">${aliasDomain}</a>`
                    if (aliasDomain.includes("*")){
                        //This is a wildcard hostname
                        domainLink = aliasDomain;
                    }
                    $("#inlineEditTable").append(`<tr>
                        <td>${domainLink}</td>
                        <td><button class="ui basic button" onclick="removeAliasDomain('${aliasDomain}');"><i class="red remove icon"></i> Remove</button></td>
                    </tr>`);
                });

                if (aliasList.length == 0){
                    $("#inlineEditTable").html(`<tr>
                        <td colspan="2"><i class="ui green circle check icon"></i> No Alias Hostname</td>
                    </tr>`);
                }
            }

            function closeThisWrapper(){
                parent.hideSideWrapper(true);
            }
        </script>
    </body>
</html>