import { createSSRApp, h } from 'vue';
import VueVirtualScroller from 'vue-virtual-scroller';
import FloatingVue from 'floating-vue';

import { setPageContext } from './usePageContext.js';
import initClient from './init-client.js';

import '../assets/css/style.css';

import Container from './container.vue';
import Link from '../components/link/link.vue';
import Icon from '../components/icon/icon.vue';

function createApp(Page, pageProps, pageContext) {
	const PageWithLayout = {
		render() {
			return h(
				Container,
				{},
				{
					default() {
						return h(Page, pageProps || {});
					},
				},
			);
		},
	};

	const app = createSSRApp(PageWithLayout);

	setPageContext(app, pageContext);

	app.provide('pageContext', pageContext);

	app.use(FloatingVue, { container: '#container' });
	app.use(VueVirtualScroller);

	app.component('Link', Link);
	app.component('Icon', Icon);

	if (typeof window === 'object') {
		initClient(pageContext);
	}

	return app;
}

export { createApp };
