import Hero from "@/components/home/Hero";
import FeatureBoxes from "@/components/home/FeatureBoxes";
import TeamPreview from "@/components/home/TeamPreview";
import ReviewsSection, {
  type ReviewView,
} from "@/components/home/ReviewsSection";
import References, {
  type ReferenceView,
} from "@/components/home/References";
import DiscordWidget from "@/components/home/DiscordWidget";
import { connectMongo } from "@/lib/mongo";
import { TeamMember } from "@/models/TeamMember";
import { Review } from "@/models/Review";
import { Reference } from "@/models/Reference";
import type { TeamMemberView } from "@/components/team/TeamMemberCard";

export const dynamic = "force-dynamic";

async function getHomeData(): Promise<{
  team: TeamMemberView[];
  reviews: ReviewView[];
  references: ReferenceView[];
}> {
  try {
    await connectMongo();
    const [teamDocs, reviewDocs, refDocs] = await Promise.all([
      TeamMember.find().sort({ order: 1, createdAt: 1 }).limit(3).lean(),
      Review.find().sort({ order: 1, createdAt: -1 }).limit(6).lean(),
      Reference.find().sort({ order: 1, createdAt: 1 }).lean(),
    ]);
    return {
      team: teamDocs.map((d) => ({
        _id: String(d._id),
        name: d.name,
        displayName: d.displayName ?? "",
        role: d.role,
        expertise: d.expertise ?? [],
        bio: d.bio ?? "",
        discordTag: d.discordTag ?? "",
        avatarFileId: d.avatarFileId ? String(d.avatarFileId) : null,
        socials: d.socials ?? {},
      })),
      reviews: reviewDocs.map((r) => ({
        _id: String(r._id),
        author: r.author,
        role: r.role ?? "",
        content: r.content,
        rating: r.rating ?? 5,
        avatarFileId: r.avatarFileId ? String(r.avatarFileId) : null,
      })),
      references: refDocs.map((r) => ({
        _id: String(r._id),
        name: r.name,
        logoFileId: String(r.logoFileId),
        url: r.url ?? "",
      })),
    };
  } catch (err) {
    console.error("[home] DB error:", err);
    return { team: [], reviews: [], references: [] };
  }
}

export default async function HomePage() {
  const { team, reviews, references } = await getHomeData();

  return (
    <>
      <Hero />
      <FeatureBoxes />
      <TeamPreview members={team} />
      <ReviewsSection reviews={reviews} />
      <DiscordWidget />
      <References references={references} />
    </>
  );
}
