import type Post from '#models/post'
import { BaseTransformer } from '@adonisjs/core/transformers'

/**
 * PostTransformer — sérialise un Post en JSON pour les consommateurs
 * (Astro landing en SSR public, et apps/web admin en édition).
 *
 * On expose à la fois `contentMd` (source markdown — utile pour l'éditeur
 * admin) et `contentHtml` (déjà rendu — utilisé par la landing). Le surcoût
 * en bytes côté landing est marginal (~quelques KB/article) et la
 * simplicité d'avoir un seul transformer prévaut. Si le volume devient
 * problématique, on splittera en PublicPostTransformer + AdminPostTransformer.
 */
export default class PostTransformer extends BaseTransformer<Post> {
  toObject() {
    const p = this.resource
    return {
      id: p.id,
      slug: p.slug,
      title: p.title,
      excerpt: p.excerpt,
      contentMd: p.contentMd,
      contentHtml: p.contentHtml,
      status: p.status,
      heroImageUrl: p.heroImageUrl,
      heroImageAlt: p.heroImageAlt,
      ogImageUrl: p.ogImageUrl,
      canonicalUrl: p.canonicalUrl,
      authorName: p.authorName,
      tags: p.tags,
      publishedAt: p.publishedAt?.toISO() ?? null,
      createdAt: p.createdAt.toISO()!,
      updatedAt: p.updatedAt?.toISO() ?? null,
      readingTimeMinutes: p.readingTimeMinutes,
      wordCount: p.wordCount,
      noindex: p.noindex,
    }
  }
}

/** Variante minimaliste pour les listes / articles liés (pas de contentHtml). */
export class PostSummaryTransformer extends BaseTransformer<Post> {
  toObject() {
    const p = this.resource
    return {
      id: p.id,
      slug: p.slug,
      title: p.title,
      excerpt: p.excerpt,
      heroImageUrl: p.heroImageUrl,
      heroImageAlt: p.heroImageAlt,
      authorName: p.authorName,
      tags: p.tags,
      publishedAt: p.publishedAt?.toISO() ?? null,
      readingTimeMinutes: p.readingTimeMinutes,
    }
  }
}
