import { Head, router, usePage } from '@inertiajs/react';
import { useEffect, useMemo } from 'react';
import { getDocPage, isValidDocSlug } from '@/docs/content';
import { DocsLayout } from '@/layouts/docs-layout';
import AppLayout from '@/layouts/app-layout';
import { show as docsShow } from '@/routes/admin/docs';
import type { BreadcrumbItem } from '@/types';
import type { UserRole } from '@/types/auth';

type Props = {
    slug: string;
};

export default function AdminDocsShow({ slug }: Props) {
    const { auth } = usePage().props;
    const role = auth.user.role as UserRole | undefined;
    const normalizedSlug = slug.replace(/^\/+|\/+$/g, '');

    const page = useMemo(
        () =>
            normalizedSlug ? (getDocPage(normalizedSlug) ?? null) : null,
        [normalizedSlug],
    );

    useEffect(() => {
        if (normalizedSlug === '') {
            return;
        }

        if (!page || !isValidDocSlug(normalizedSlug, role)) {
            router.visit(docsShow.url());
        }
    }, [normalizedSlug, page, role]);

    return (
        <>
            <Head
                title={
                    page ? `${page.title} — Documentation` : 'Documentation'
                }
            />
            <DocsLayout page={page} role={role} />
        </>
    );
}

AdminDocsShow.layout = (page: React.ReactNode) => (
    <AppLayout
        breadcrumbs={
            [
                { title: 'Documentation', href: docsShow.url() },
            ] satisfies BreadcrumbItem[]
        }
    >
        {page}
    </AppLayout>
);
