import { boolean, integer, jsonb, pgTable, text, timestamp, uuid } from "drizzle-orm/pg-core";

const id = () => uuid("id").primaryKey().defaultRandom();
const createdAt = () => timestamp("created_at", { withTimezone: true }).notNull().defaultNow();
const updatedAt = () => timestamp("updated_at", { withTimezone: true }).notNull().defaultNow();

export type PublicGalleryImage = {
  url: string;
  altEs: string;
  altEn: string;
};

/**
 * Editable public content for the showcase, blog, and legal center.
 * Image bytes stay outside PostgreSQL; this table stores URLs and SEO metadata.
 */
export const yePublicEntriesTable = pgTable("ye_public_entries", {
  id: id(),
  kind: text("kind").notNull().default("showcase"),
  slug: text("slug").notNull().unique(),
  category: text("category").notNull().default("general"),
  status: text("status").notNull().default("published"),
  titleEs: text("title_es").notNull(),
  titleEn: text("title_en").notNull(),
  summaryEs: text("summary_es").notNull().default(""),
  summaryEn: text("summary_en").notNull().default(""),
  bodyEs: text("body_es").notNull().default(""),
  bodyEn: text("body_en").notNull().default(""),
  imageUrl: text("image_url"),
  imageAltEs: text("image_alt_es").notNull().default(""),
  imageAltEn: text("image_alt_en").notNull().default(""),
  gallery: jsonb("gallery").$type<PublicGalleryImage[]>().notNull().default([]),
  seoTitleEs: text("seo_title_es").notNull().default(""),
  seoTitleEn: text("seo_title_en").notNull().default(""),
  seoDescriptionEs: text("seo_description_es").notNull().default(""),
  seoDescriptionEn: text("seo_description_en").notNull().default(""),
  published: boolean("published").notNull().default(true),
  featured: boolean("featured").notNull().default(false),
  sortOrder: integer("sort_order").notNull().default(0),
  createdAt: createdAt(),
  updatedAt: updatedAt(),
});

export type PublicEntry = typeof yePublicEntriesTable.$inferSelect;
export type InsertPublicEntry = typeof yePublicEntriesTable.$inferInsert;