import { NextResponse } from 'next/server'
import { readFile } from 'fs/promises'
import path from 'path'
import { getPayload } from 'payload'
import config from '@payload-config'

export const runtime = 'nodejs'
export const maxDuration = 300

type SeedProduct = {
  name: string
  productDisplayName: string
  slug: string
  sortOrder: number
  index: string
  type: string
  materials: string
  year: string
  status: string
  description: string
  specs: string
  notes: string
  imageFile: string
  imageAlt: string
  seoTitle: string
  seoDescription: string
  price: number | null
  currency: 'EUR' | 'USD'
  availability: string
  isPublished: boolean
}

const PRODUCTS: SeedProduct[] = [
  {
    name: 'Solar_Altar',
    productDisplayName: 'Solar Altar',
    slug: 'solar-altar',
    sortOrder: 0,
    index: 'PROJET_001',
    type: 'LAMPE DE TABLE',
    materials: 'BÉTON TEXTURÉ + DÔME CÉRAMIQUE LAQUÉ',
    year: '2026',
    status: 'PROTOTYPE [80%]',
    description: 'Exploration de la lumière à travers des contraintes géométriques. Le dôme sphérique en céramique laquée coiffe un corps en béton texturé peint à la main. Chaque pièce est unique.',
    specs: 'H: 45cm / Ø: 18cm\nPoids: 3.2kg\nAlimentation: 220V — E27\nCâble: tressé rouge 2m',
    notes: 'Inspiré des lampadaires soviétiques des années 60. Le béton est coulé à la main dans des moules uniques. La peinture acrylique est appliquée au spalter.',
    imageFile: 'lamp-violet.jpg',
    imageAlt: 'Solar Altar — Lampe béton violet, dôme céramique bleu, REBOURS 2026',
    seoTitle: 'REBOURS — Solar Altar | Collection 001',
    seoDescription: 'Lampe de table unique. Béton texturé coulé à la main + dôme céramique laqué. Pièce unique fabriquée à Paris.',
    price: 180000,
    currency: 'EUR',
    availability: 'https://schema.org/LimitedAvailability',
    isPublished: true,
  },
  {
    name: 'TABLE_TERRAZZO',
    productDisplayName: 'Table Terrazzo',
    slug: 'table-terrazzo',
    sortOrder: 1,
    index: 'PROJET_002',
    type: 'TABLE BASSE + ÉTAGÈRE MODULAIRE',
    materials: 'TERRAZZO + ACIER TUBULAIRE + RÉSINE',
    year: '2026',
    status: 'STRUCTURAL_TEST',
    description: 'Collision du brutalisme et de la couleur Memphis. Le plateau en terrazzo fait à la main intègre des inclusions de marbre rose et bleu. Les colonnes cylindriques bicolores sont en acier peint au four.',
    specs: 'Table: L120 × P60 × H38cm\nPoids plateau: 28kg\nPieds: acier Ø60mm\nÉtagère: H180 × L80 × P35cm',
    notes: "Le terrazzo est réalisé dans l'atelier de Pantin. Chaque dalle est unique. L'étagère est assemblée à partir de tubes industriels récupérés et de panneaux laqués.",
    imageFile: 'table-terrazzo.jpg',
    imageAlt: 'TABLE TERRAZZO — Table basse terrazzo et étagère acier, REBOURS 2026',
    seoTitle: 'REBOURS — TABLE TERRAZZO | Collection 001',
    seoDescription: 'Table basse et étagère modulaire. Terrazzo fait main + acier tubulaire. Pièce unique fabriquée à Paris.',
    price: null,
    currency: 'EUR',
    availability: 'https://schema.org/PreOrder',
    isPublished: true,
  },
  {
    name: 'MODULE_SÉRIE',
    productDisplayName: 'Module Série',
    slug: 'module-serie',
    sortOrder: 2,
    index: 'PROJET_003',
    type: 'LAMPES — SÉRIE LIMITÉE',
    materials: 'BÉTON COLORÉ + DÔME LAQUÉ + NÉON',
    year: '2026',
    status: 'FINAL_ASSEMBLY',
    description: "Série de 7 lampes aux corps béton colorés, chacune avec un dôme d'une couleur différente. Les néons horizontaux créent un anneau lumineux entre le dôme et le corps.",
    specs: 'H: 35–65cm (7 tailles)\nDôme: Ø15–28cm\nAnneau néon: 8W — 3000K\nÉdition: 7 ex. par coloris',
    notes: 'Les corps sont coulés en série mais peints individuellement. Les dômes sont réalisés par un souffleur de verre artisanal. Le câble tressé rouge est la signature de la série.',
    imageFile: 'lampes-serie.jpg',
    imageAlt: 'MODULE SÉRIE — Collection de 7 lampes béton colorées, REBOURS 2026',
    seoTitle: 'REBOURS — MODULE SÉRIE | Collection 001',
    seoDescription: 'Série de 7 lampes béton colorées, dôme laqué et néon. Édition limitée fabriquée à Paris.',
    price: null,
    currency: 'EUR',
    availability: 'https://schema.org/PreOrder',
    isPublished: true,
  },
]

const HOMEPAGE = {
  heroLabel: '// ARCHIVE_001 — 2026',
  heroTitle: 'REBOURS|STUDIO',
  heroSubtitle: "Mobilier d'art contemporain.\nSpace Age × Memphis.",
  heroStatus: 'STATUS: [PROTOTYPE EN COURS]\nCOLLECTION_001 — BIENTÔT DISPONIBLE',
  collectionLabel: '// COLLECTION_001',
  collectionCta: 'CLIQUER POUR OUVRIR',
  contactLabel: '// CONTACT',
  contactTitle: 'UNE QUESTION ?|PARLONS-EN',
  contactDescription: "Commandes sur mesure, questions techniques,\nou simplement dire bonjour.",
  whatsappNumber: '33651755191',
  whatsappButtonText: 'CONTACTEZ-NOUS SUR WHATSAPP',
  contactResponseTime: 'RÉPONSE SOUS 24H',
  footerText: '© 2026 REBOURS STUDIO — PARIS',
  instagramUrl: 'https://instagram.com/rebour.studio',
  seoTitle: "REBOURS — Mobilier d'art contemporain | Collection 001",
  seoDescription:
    "REBOURS Studio crée du mobilier d'art contemporain inspiré du Space Age et du mouvement Memphis. Pièces uniques fabriquées à Paris. Collection 001 en cours.",
}

const ASSETS_DIR = path.join(process.cwd(), 'public', 'assets')

export async function POST(request: Request) {
  const auth = request.headers.get('authorization') || ''
  const token = auth.replace(/^Bearer\s+/i, '')
  if (!token || token !== process.env.PAYLOAD_SECRET) {
    return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
  }

  const payload = await getPayload({ config })
  const log: string[] = []

  try {
    for (const p of PRODUCTS) {
      const existing = await payload.find({
        collection: 'products',
        where: { slug: { equals: p.slug } },
        limit: 1,
      })
      if (existing.docs.length) {
        log.push(`Skip (exists): ${p.slug}`)
        continue
      }

      const filePath = path.join(ASSETS_DIR, p.imageFile)
      let mediaId: number | string | null = null
      try {
        const buffer = await readFile(filePath)
        const media = await payload.create({
          collection: 'media',
          data: { alt: p.imageAlt },
          file: { data: buffer, mimetype: 'image/jpeg', name: p.imageFile, size: buffer.byteLength },
        })
        mediaId = media.id
        log.push(`  img uploaded: ${p.imageFile}`)
      } catch (err) {
        log.push(`  img FAILED ${p.imageFile}: ${(err as Error).message}`)
        continue
      }

      await payload.create({
        collection: 'products',
        data: {
          name: p.name,
          productDisplayName: p.productDisplayName,
          slug: p.slug,
          sortOrder: p.sortOrder,
          index: p.index,
          type: p.type,
          materials: p.materials,
          year: p.year,
          status: p.status,
          description: p.description,
          specs: p.specs,
          notes: p.notes,
          seoTitle: p.seoTitle,
          seoDescription: p.seoDescription,
          price: p.price ?? undefined,
          currency: p.currency,
          availability: p.availability as never,
          isPublished: p.isPublished,
          images: mediaId != null ? [{ image: mediaId as number }] : [],
        },
      })
      log.push(`  CREATED: ${p.slug}`)
    }

    await payload.updateGlobal({ slug: 'homePage', data: HOMEPAGE })
    log.push(`HomePage: updated`)

    return NextResponse.json({ ok: true, log })
  } catch (err) {
    log.push(`ERROR: ${(err as Error).message}`)
    return NextResponse.json({ ok: false, log, error: (err as Error).message }, { status: 500 })
  }
}
