import { factories } from "@strapi/strapi";

/**
 * Deeply populate every nested component + media field of the
 * Homepage single type so the REST API returns the whole document
 * in one request: GET /api/homepage
 */
const POPULATE = {
  hero: { populate: { slides: { populate: { backgroundImage_16x9: true, mobileBackgroundImage_9x16: true, thumbnail_10x7: true } } } },
  leadership: { populate: { leaders: { populate: { image_6x5: true } } } },
  vision: { populate: { image_8x3: true, mobileImage_1x1: true, stats: { populate: { icon_1x1: true } } } },
  legacy: { populate: { backgroundImage_3x2: true, image_16x9: true } },
  businessPortfolio: { populate: { businesses: { populate: { image_3x2: true, logo_1x1: true } } } },
  partners: { populate: { partners: { populate: { logo_12x5: true } } } },
  glance: { populate: { stats: { populate: { icon_1x1: true } } } },
  testimonials: { populate: { testimonials: { populate: { avatar_1x1: true } } } },
  sustainability: { populate: { initiatives: { populate: { image_9x4: true } } } },
  awards: { populate: { awards: { populate: { image_1x1: true } } } },
  eventEnquiry: true,
  pressRelease: { populate: { pressReleases: { populate: { image_16x9: true, buttonPdf: true } } } },
  philanthropic: { populate: { activities: { populate: { image_5x3: true } } } },
  gallery: { populate: { images_3x2: true } },
  newsletters: { populate: { newsletters: { populate: { image_1x1: true, pdfFile: true } } } },
  partnerCta: true,
};

export default factories.createCoreController("api::homepage.homepage", () => ({
  async find(ctx) {
    const data = await strapi
      .documents("api::homepage.homepage")!
      .findFirst({ populate: POPULATE });

    return this.transformResponse(data);
  },
}));
