<html>
<head>
    <title>Expose</title>
    <meta charset="UTF-8">
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
    <script src="https://unpkg.com/tailwindcss-jit-cdn"></script>
    <script type="tailwind-config">
      {
        "darkMode": "class",
        "theme": {
            "extend": {
                "colors": {
                    "dark-blue-800": "#ff9900"
                }
            }
        }
      }
    </script>
    <style type="postcss">
        ::selection {
            @apply bg-pink-500 bg-opacity-50;
        }
    </style>
</head>
<body>
<div class="min-h-screen bg-white">
    <nav class="bg-white border-b border-gray-200">
        <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
            <div class="flex justify-between h-16">
                <div class="flex items-center">
                    <div class="flex-shrink-0 flex items-center font-bold">
                        <a href="https://expose.beyondco.de" target="_blank" class="inline-flex items-center self-start">
                            <img src="https://beyondco.de/apps/icons/expose.png" class="h-12">
                            <p class="ml-4 font-headline text-lg">Expose</p>
                        </a>
                    </div>
                    <div class="hidden sm:-my-px sm:ml-6 sm:flex">
                        <a href="/users"
                           class="
                           {% if request.is('users*') %} border-indigo-500 focus:border-indigo-700 text-gray-900 {% else %} border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 focus:text-gray-700 focus:border-gray-300{% endif %}
                           inline-flex items-center px-1 pt-1 border-b-2 text-sm font-medium leading-5  focus:outline-none  transition duration-150 ease-in-out">
                            Users
                        </a>
                        <a href="/sites"
                           class="
                           {% if request.is('sites') %} border-indigo-500 focus:border-indigo-700 text-gray-900 {% else %} border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 focus:text-gray-700 focus:border-gray-300{% endif %}
                           ml-8 inline-flex items-center px-1 pt-1 border-b-2 text-sm font-medium leading-5 focus:outline-none transition duration-150 ease-in-out">
                            Shared sites
                        </a>
                        <a href="/tcp"
                           class="
                           {% if request.is('tcp') %} border-indigo-500 focus:border-indigo-700 text-gray-900 {% else %} border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 focus:text-gray-700 focus:border-gray-300{% endif %}
                           ml-8 inline-flex items-center px-1 pt-1 border-b-2 text-sm font-medium leading-5 focus:outline-none transition duration-150 ease-in-out">
                            TCP connections
                        </a>
                        <a href="/settings"
                           class="
                           {% if request.is('settings') %} border-indigo-500 focus:border-indigo-700 text-gray-900 {% else %} border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 focus:text-gray-700 focus:border-gray-300{% endif %}
                           ml-8 inline-flex items-center px-1 pt-1 border-b-2 text-sm font-medium leading-5  focus:outline-none  transition duration-150 ease-in-out">
                            Settings
                        </a>
                    </div>
                </div>
                <div class="-mr-2 flex items-center sm:hidden">
                    <!-- Mobile menu button -->
                    <button
                        class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-gray-500 hover:bg-gray-100 focus:outline-none focus:bg-gray-100 focus:text-gray-500 transition duration-150 ease-in-out">
                        <!-- Menu open: "hidden", Menu closed: "block" -->
                        <svg class="block h-6 w-6" stroke="currentColor" fill="none" viewBox="0 0 24 24">
                            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
                                  d="M4 6h16M4 12h16M4 18h16"/>
                        </svg>
                        <!-- Menu open: "block", Menu closed: "hidden" -->
                        <svg class="hidden h-6 w-6" stroke="currentColor" fill="none" viewBox="0 0 24 24">
                            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
                                  d="M6 18L18 6M6 6l12 12"/>
                        </svg>
                    </button>
                </div>
            </div>
        </div>
    </nav>
    <div class="max-w-7xl mx-auto sm:px-6 lg:px-8" id="stats">
        <div class="py-8">
            <dl class="mt-5 grid grid-cols-1 gap-5 sm:grid-cols-3">
                <div class="px-4 py-5 bg-white shadow rounded-lg overflow-hidden sm:p-6">
                    <dt class="text-sm font-medium text-gray-500 truncate">
                        Total Users
                    </dt>
                    <dd class="mt-1 text-3xl font-semibold text-gray-900">
                        @{ users.total }
                    </dd>
                </div>

                <div class="px-4 py-5 bg-white shadow rounded-lg overflow-hidden sm:p-6">
                    <dt class="text-sm font-medium text-gray-500 truncate">
                        Shared Sites
                    </dt>
                    <dd class="mt-1 text-3xl font-semibold text-gray-900">
                        @{ sites.length }
                    </dd>
                </div>

                <div class="px-4 py-5 bg-white shadow rounded-lg overflow-hidden sm:p-6">
                    <dt class="text-sm font-medium text-gray-500 truncate">
                        Shared TCP connections
                    </dt>
                    <dd class="mt-1 text-3xl font-semibold text-gray-900">
                        @{ tcp_connections.length }
                    </dd>
                </div>
            </dl>
        </div>
    </div>

    <div class="py-10">
        <header>
            <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
                <h1 class="text-3xl font-bold leading-tight text-gray-900">
                    {% block title %}{% endblock %}
                </h1>
            </div>
        </header>
        <main>
            <div class="max-w-7xl mx-auto sm:px-6 lg:px-8" id="app">
                {% block content %}{% endblock %}
            </div>
        </main>
    </div>
</div>
{% block scripts %}{% endblock %}
<script>
    new Vue({
        el: '#stats',

        delimiters: ['@{', '}'],

        data: {
            users: [],
            sites: [],
            tcp_connections: [],
        },

        methods: {
            getUsers(page) {
                fetch('/api/users')
                    .then((response) => {
                        return response.json();
                    }).then((data) => {
                    this.users = data.paginated;
                });
            },

            getConnections() {
                fetch('/api/tcp')
                    .then((response) => {
                        return response.json();
                    }).then((data) => {
                    this.tcp_connections = data.tcp_connections;
                });
            },

            getSites() {
                fetch('/api/sites')
                    .then((response) => {
                        return response.json();
                    }).then((data) => {
                    this.sites = data.sites;
                });
            },
        },

        mounted() {
            this.getUsers();
            this.getConnections();
            this.getSites();
        }
    })
</script>
</body>
</html>
