<div class="ui stackable grid">
        <div class="ten wide column">
            <div class="standardContainer">
                <div class="ui basic segment" style="margin-top: 1em;">
                    <h2>New Proxy Rule</h2>
                    <p>You can create a proxy endpoing by subdomain or virtual directories</p>
                    <div class="ui form">
                        <div class="field">
                            <label>Proxy Type</label>
                            <div class="ui selection dropdown">
                                <input type="hidden" id="ptype" value="subd">
                                <i class="dropdown icon"></i>
                                <div class="default text">Proxy Type</div>
                                <div class="menu">
                                    <div class="item" data-value="subd">Sub-domain</div>
                                    <div class="item" data-value="vdir">Virtual Directory</div>
                                </div>
                            </div>
                        </div>
                        <div class="field">
                            <label>Subdomain Matching Keyword / Virtual Directory Name</label>
                            <input type="text" id="rootname" placeholder="s1.mydomain.com">
                        
                        </div>
                        <div class="field">
                            <label>IP Address or Domain Name with port</label>
                            <input type="text" id="proxyDomain" onchange="autoCheckTls(this.value);">
                            <small>E.g. 192.168.0.101:8000 or example.com</small>
                        </div>
                        <div class="field">
                            <div class="ui checkbox">
                                <input type="checkbox" id="reqTls">
                                <label>Proxy Target require TLS Connection <br><small>(i.e. Your proxy target starts with https://)</small></label>
                            </div>
                        </div>
                        <button class="ui basic button" onclick="newProxyEndpoint();"><i class="blue add icon"></i> Create Endpoint</button>
                        <br><br>
                    </div>
                </div>
            </div>
        </div>
        <div class="six wide column">
            <div class="ui basic segment" style="height: 100%; background-color: var(--theme_grey); color: var(--theme_lgrey);">
                <br>
                <span style="font-size: 1.2em; font-weight: 300;">Subdomain</span><br>
                Example of subdomain matching keyword:<br>
                <code>s1.arozos.com</code> <br>(Any access starting with s1.arozos.com will be proxy to the IP address below)<br>
                <div class="ui divider"></div>
                <span style="font-size: 1.2em; font-weight: 300;">Virtual Directory</span><br>
                Example of virtual directory name: <br>
                <code>/s1/home</code> <br>(Any access to {this_server}/s1/ will be proxy to the IP address below)<br>
                <br>
            </div>
        </div>
    </div>
</div>
<script>
    //New Proxy Endpoint
    function newProxyEndpoint(){
        var type = $("#ptype").val();
        var rootname = $("#rootname").val();
        var proxyDomain = $("#proxyDomain").val();
        var useTLS = $("#reqTls")[0].checked;

        if (type === "vdir") {
            if (!rootname.startsWith("/")) {
                rootname = "/" + rootname
                $("#rootname").val(rootname);
            }
        }else{
            if (!isSubdomainDomain(rootname)){
                //This doesn't seems like a subdomain
                if (!confirm(rootname + " does not looks like a subdomain. Continue anyway?")){
                    return;
                }   
            }
        }

        if (rootname.trim() == ""){
            $("#rootname").parent().addClass("error");
            return
        }else{
            $("#rootname").parent().removeClass("error");
        }

        if (proxyDomain.trim() == ""){
            $("#proxyDomain").parent().addClass("error");
            return
        }else{
            $("#proxyDomain").parent().removeClass("error");
        }

        //Create the endpoint by calling add
        $.ajax({
            url: "/api/proxy/add",
            data: {type: type, rootname: rootname, tls: useTLS, ep: proxyDomain},
            success: function(data){
                if (data.error != undefined){
                    msgbox(data.error, false, 5000);
                }else{
                    //OK
                    listVdirs();
                    listSubd();
                    msgbox("Proxy Endpoint Added");

                    //Clear old data
                    $("#rootname").val("");
                    $("#proxyDomain").val("");
                }
            }
        });
        
    }

    //Generic functions for delete rp endpoints 
    function deleteEndpoint(ptype, epoint){
        if (confirm("Confirm remove proxy for :" + epoint + " (type: " + ptype + ")?")){
            $.ajax({
                url: "/api/proxy/del",
                data: {ep: epoint, ptype: ptype},
                success: function(){
                    listVdirs();
                    listSubd();
                }
            })
        }
    }


    function autoCheckTls(targetDomain){
       $.ajax({
            url: "/api/proxy/tlscheck",
            data: {url: targetDomain},
            success: function(data){
                if (data.error != undefined){

                }else if (data == "https"){
                    $("#reqTls").parent().checkbox("set checked");
                }else if (data == "http"){
                    $("#reqTls").parent().checkbox("set unchecked");
                }
            }
       })
    }


    //Check if a string is a valid subdomain 
    function isSubdomainDomain(str) {
        const regex = /^(localhost|[a-z0-9]+([\-.]{1}[a-z0-9]+)*\.[a-z]{2,}|[a-z0-9]+([\-.]{1}[a-z0-9]+)*\.[a-z]{2,}\.)$/i;
        return regex.test(str);
    } 
</script>