import { getCurrentUser } from "@/modules/auth";
import { subscriptionService } from "@/modules/subscriptions";
import { favoriteTemplateService } from "@/modules/favorites";
import { savedTemplateService } from "@/modules/calendar";
import { contentService } from "@/modules/content";
import { NavbarInteractive } from "@/components/layout/NavbarInteractive";

export async function Navbar() {
  const user = await getCurrentUser();
  const authenticated = !!user;

  let favorites: string[] = [];
  let savedEntries: Awaited<
    ReturnType<typeof savedTemplateService.listForUser>
  > = [];
  let subscription: Awaited<
    ReturnType<typeof subscriptionService.findActiveForUser>
  > | null = null;
  let contactContent: Awaited<
    ReturnType<typeof contentService.getPublished>
  > | null = null;

  if (authenticated) {
    [favorites, savedEntries, subscription] = await Promise.all([
      favoriteTemplateService.listTemplateIds(user.id),
      savedTemplateService.listForUser(user.id),
      subscriptionService.findActiveForUser(user.id),
    ]);
  }

  contactContent = await contentService.getPublished("contact");
  const contactData = (contactContent?.data ?? {}) as Record<string, unknown>;
  const supportEmail =
    (contactData.supportEmail as string)?.trim() || "hello@eventflow.com";
  const phone = (contactData.phone as string)?.trim() || "+91 98765 43210";

  return (
    <NavbarInteractive
      user={
        user
          ? {
              id: user.id,
              name: user.name,
              email: user.email,
              avatar: user.avatar,
              role: user.role,
              emailVerified: user.emailVerified,
            }
          : null
      }
      subscription={
        subscription
          ? {
              planSlug: subscription.planSlug,
              planName: subscription.planName,
              status: subscription.status,
              endDate: subscription.endDate,
              trialEndsAt: subscription.trialEndsAt,
            }
          : null
      }
      favoriteTemplateIds={favorites}
      savedEntries={savedEntries.map((s) => ({
        id: s.id,
        templateId: s.templateId,
        templateName: s.templateName,
        templateCategory: s.templateCategory,
        templateIcon: s.templateIcon,
        scheduledFor: s.scheduledFor,
        note: s.note,
      }))}
      supportEmail={supportEmail}
      phone={phone}
    />
  );
}
