import { GET as getUtil } from "@/utils/get";
import { ProgramSessions } from "./_components/content";
import { getTranslations, getMessages } from "next-intl/server";
import { NextIntlClientProvider } from "next-intl";

export const generateMetadata = async () => {
    const t = await getTranslations();
    return {
        title: `${t('routes.sessions')}` || "Mwaheb"
    }
};

export default async function SessionDetails({ params, searchParams }: { params: Promise<{ id: string }>, searchParams: Promise<{ preview?: string, session?: string, exam?: string, review?: string, activity?: string }> }) {
    const { id } = await params;
    const { locale } = await params as any;
    const { preview, session, exam, review, activity } = await searchParams;
    const idWithOutSlug = id.includes("fullscreen-") ? id.split("fullscreen-")[1] : id;
    
    console.log("SessionDetails Debug:", { id, idWithOutSlug, BASE_URL: process.env.NEXT_PUBLIC_BASE_URL });

    if (!idWithOutSlug) {
        return <div className="p-8 text-center text-red-500">Error: Invalid Session ID</div>;
    }

    let sessionResponse: any = null;
    try {
        sessionResponse = await getUtil({ url: `/user/sessions/${idWithOutSlug}`, context: "dashboard", revalidate: 0 });
    } catch (error) {
        console.error("Fetch error session:", error);
        return (
            <div className="flex flex-col items-center justify-center p-8 text-red-500">
                <p>Error loading session details.</p>
                <p className="text-sm text-gray-500 mt-2">{error instanceof Error ? error.message : String(error)}</p>
                <p className="text-xs text-gray-400 mt-1">ID: {idWithOutSlug}</p>
            </div>
        );
    }
    const courseName = sessionResponse?.group;
    const isPreviewMode = preview === 'true';
    const selectedSessionId = session ? parseInt(session) : undefined;
    const selectedExamId = exam ? parseInt(exam) : undefined;
    const selectedReviewId = review ? parseInt(review) : undefined;
    const selectedActivityId = activity ? parseInt(activity) : undefined;
    
    // Calculate actual session count from the data
    const sessionCount = sessionResponse?.data
        ?.filter((item: any) => item.model === "module")
        .reduce((total: number, module: any) => {
            return total + (module.session_groups?.length || 0);
        }, 0);
    
    return (
        <main>
            <NextIntlClientProvider locale={locale} messages={await getMessages()}>
                <ProgramSessions 
                    sessions={sessionResponse?.data || []} 
                    courseName={courseName} 
                    groupId={idWithOutSlug}
                    isPreviewMode={isPreviewMode}
                    initialSessionId={selectedSessionId}
                    initialExamId={selectedExamId}
                    initialReviewId={selectedReviewId}
                    initialActivityId={selectedActivityId}
                    lessonCount={sessionResponse?.count_sessions}
                    modulesCount={sessionResponse?.count_modules}
                    activitiesCount={sessionResponse?.count_activities}
                    examsCount={sessionResponse?.count_exams}
                    reviewsCount={sessionResponse?.count_reviews}
                    canDownloadCertificate={sessionResponse?.can_download_certificate}
                />
            </NextIntlClientProvider>
        </main>
    )
}