import { getContentList } from "@/libs/axios/modules/content";
import { getProfile } from "@/libs/axios/modules/user";
import { contentMenuConfigs, type ContentMenu } from "@/data/menu";
import { cookies } from "next/headers";
import MainNavbar from "./MainNavbar";

export default async function MainNavbarServer() {
    const cookieStore = await cookies();
    const tokenCookie = cookieStore.get("token")?.value;
    const rawToken = tokenCookie?.slice(1, -1);

    const userCookie = cookieStore.get("user")?.value;
    const user = userCookie ? JSON.parse(userCookie) : null;

    let validUser = user;
    let invalidToken = false;

    if (rawToken) {
        try {
            const profileRes = await getProfile(rawToken);
            validUser = profileRes.data.data ?? null;
        } catch {
            validUser = null;
            invalidToken = true;
        }
    } else {
        validUser = null;
        invalidToken = !!user;
    }

    const fallback = { data: { data: [] } };

    const listResults = await Promise.all(
        contentMenuConfigs.map(({ resource }) =>
            getContentList(resource as any).catch(() => fallback)
        )
    );

    const contentMenus: ContentMenu[] = contentMenuConfigs.map((config, i) => ({
        resource: config.resource,
        labelKey: config.labelKey,
        items: (listResults[i].data.data ?? []).map((item: any) => ({
            title: item.title,
            title_en: item.title_en,
            slug: item.slug,
        })),
    }));

    return <MainNavbar initialUser={validUser} invalidToken={invalidToken} contentMenus={contentMenus} />;
}
