"use client";

import React from "react";
import {useSession} from "next-auth/react";
import {SidebarInset, SidebarProvider, SidebarTrigger} from "@/components/ui/sidebar";
import {AppSidebar} from "@/components/app-sidebar";
import {Separator} from "@/components/ui/separator";
import {DynamicBreadcrumb} from "@/components/dynamic-breadcrumb";
import LoginScreen from "@/components/login-screen";
import {ErrorBoundary} from "@/components/error-boundary";

interface AuthWrapperProps {
    children: React.ReactNode;
}

export function AuthWrapper({children}: AuthWrapperProps) {
    const {data: session, status} = useSession();

    if (status === "loading") {
        return (
            <div className="flex items-center justify-center min-h-screen">
                <div className="animate-spin rounded-full h-32 w-32 border-b-2 border-gray-900"></div>
            </div>
        );
    }

    if (session?.accessToken) {
        return (
            <SidebarProvider
                style={
                    {
                        "--sidebar-width": "calc(var(--spacing) * 72)",
                        "--header-height": "calc(var(--spacing) * 12)",
                    } as React.CSSProperties
                }
            >
                <AppSidebar/>
                <SidebarInset>
                    <header
                        className="flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12">
                        <div className="flex items-center gap-2 px-4">
                            <SidebarTrigger className="-ml-1"/>
                            <Separator
                                orientation="vertical"
                                className="mr-2 data-[orientation=vertical]:h-4"
                            />
                            <DynamicBreadcrumb/>
                        </div>
                    </header>
                    <ErrorBoundary>
                        {children}
                    </ErrorBoundary>
                </SidebarInset>
            </SidebarProvider>
        );
    }

    return (
        <ErrorBoundary>
            <LoginScreen/>
        </ErrorBoundary>
    );
}