<template>
	<div class="container-fluid">
		<Navbar v-model:server="server" :user="user" />
		<div class="container">
			<Login :secret="secret" v-model:client="client" v-model:server="server" v-model:user="user" />
			<router-view v-if="user" :client="client"></router-view>
		</div>
	</div>
</template>

<script>
	import { watchEffect } from 'vue';

	import Navbar from './Navbar.vue';
	import Login from './Login.vue';
	import RouteSchedule from './RouteSchedule.vue';
	import RoutePatientLookup from './RoutePatientLookup.vue';
	import RoutePatientDetail from './RoutePatientDetail.vue';
	import RouteRecall from './RouteRecall.vue';

	export default {
		components: {
			Navbar, Login
		},
		props: {
			secret: String
		},
		data() {
			return {
				client: null,
				server: null,
				user: null,
				heartbeat: null,
				banner: '',
				authenticated: false
			};
		},
		watch: {
			async client(value, oldvalue) {
				if(this.heartbeat) window.clearInterval(this.heartbeat);
				else {
					[
						{ path: '/', component: RouteSchedule },
						{ path: '/patient', component: RoutePatientLookup },
						{ path: '/patient/:id', component: RoutePatientDetail },
						{ path: '/recall', component: RouteRecall },
					].forEach(route => this.$root.$router.addRoute(route));
					await this.$root.$router.replace(this.$route);
				}
				if(value) {
					this.heartbeat = await value.heartbeat();
					var stop = watchEffect(() => { if(!value.connected.value) { stop(); this.client = this.server = this.user = null; } });
				}
			}
		}
	};
</script>
