import { factories } from "@strapi/strapi";

const POPULATE = {
  hero: { populate: { mobileImage_9x16: true, desktopImage_12x5: true } },
  stats: { populate: { cards: { populate: { icon_1x1: true } } } },
  about: { populate: { paragraphs: true } },
  companyDetails: {
    populate: {
      mapImage_1x1: true,
      companyPoints: true,
      divisionOverview: true,
    },
  },
};

export default factories.createCoreController("api::custom-page.custom-page", ({ strapi }) => ({
  async find(ctx) {
    // Add populate to standard find
    ctx.query = { ...ctx.query, populate: POPULATE };
    const { data, meta } = await super.find(ctx);
    return { data, meta };
  },
  async findOne(ctx) {
    // Allows finding by slug
    const { id } = ctx.params;
    
    // Check if id is a slug (not just numbers)
    const isSlug = isNaN(Number(id));
    
    if (isSlug) {
      const entity = await strapi.db.query("api::custom-page.custom-page").findOne({
        where: { slug: id },
        populate: POPULATE,
      });
      if (!entity) return ctx.notFound();
      const sanitizedEntity = await this.sanitizeOutput(entity, ctx);
      return this.transformResponse(sanitizedEntity);
    }
    
    ctx.query = { ...ctx.query, populate: POPULATE };
    const { data, meta } = await super.findOne(ctx);
    return { data, meta };
  }
}));
