import SiteHeader from "@/components/site/header";
import Hero from "@/components/site/hero";
import BrandMarquee from "@/components/site/brand-marquee";
import BannerCarousel from "@/components/site/banner-carousel";
import ServicesStrip from "@/components/site/services-strip";
import ProductsSection from "@/components/site/products";
import Stats from "@/components/site/stats";
import About from "@/components/site/about";
import Articles from "@/components/site/articles";
import RepairForm from "@/components/site/repair-form";
import SiteFooter from "@/components/site/footer";
import Reveal from "@/components/site/reveal";
import dynamicClient from "next/dynamic";

// دستیار هوشمند به‌صورت تنبل بارگذاری می‌شود تا JS اولیه سبک‌تر بماند
const AiChat = dynamicClient(() => import("@/components/site/ai-chat"));
import { db } from "@/lib/db";
import type { ProductDTO, ArticleDTO, BannerDTO } from "@/lib/types";

export const dynamic = "force-dynamic";

export default async function Home() {
  // داده‌های فروشگاه مستقیماً از دیتابیس (سریع و بدون درخواست HTTP اضافی)
  const [products, articles, banners, contentRows] = await Promise.all([
    db.product.findMany({ where: { active: true, featured: true }, orderBy: { sortOrder: "asc" }, take: 12 }),
    db.article.findMany({ where: { published: true }, orderBy: { createdAt: "desc" }, take: 3 }),
    db.banner.findMany({ where: { active: true, position: "home" }, orderBy: { sortOrder: "asc" } }),
    db.siteContent.findMany(),
  ]);

  const content: Record<string, string> = Object.fromEntries(contentRows.map((r) => [r.key, r.value]));

  const productDtos: ProductDTO[] = products.map((p) => ({
    ...p,
    features: JSON.parse(p.features || "[]"),
  }));

  const articleDtos: ArticleDTO[] = articles.map((a) => ({
    id: a.id,
    title: a.title,
    excerpt: a.excerpt,
    content: a.content,
    image: a.image,
    day: a.day,
    month: a.month,
    tone: a.tone,
    published: a.published,
    createdAt: a.createdAt.toISOString(),
  }));

  const bannerDtos: BannerDTO[] = banners.map((b) => ({
    id: b.id,
    title: b.title,
    subtitle: b.subtitle,
    image: b.image,
    link: b.link,
    position: b.position,
    active: b.active,
    sortOrder: b.sortOrder,
  }));

  return (
    <div className="min-h-screen flex flex-col relative">
      <SiteHeader />
      <main className="flex-1">
        <Hero content={content} />
        <Reveal><BannerCarousel banners={bannerDtos} /></Reveal>
        <BrandMarquee />
        <Reveal><ServicesStrip /></Reveal>
        <ProductsSection products={productDtos} />
        <Reveal><Stats content={content} /></Reveal>
        <Reveal><About content={content} /></Reveal>
        <Reveal><Articles articles={articleDtos} /></Reveal>
        <Reveal><RepairForm /></Reveal>
      </main>
      <SiteFooter content={content} />
      <AiChat />
    </div>
  );
}
