import { PrismaClient } from "@prisma/client"
import { PrismaPg } from "@prisma/adapter-pg"
import { Pool } from "pg"
import { hash } from "bcryptjs"

const pool = new Pool({ connectionString: process.env.DATABASE_URL })
const db = new PrismaClient({ adapter: new PrismaPg(pool) })

const UNSPLASH = (id: string) =>
  `https://images.unsplash.com/photo-${id}?w=800&q=80&auto=format&fit=crop`

async function main() {
  // Admin
  const adminPassword = await hash("valabel2026", 12)
  await db.user.upsert({
    where: { email: "infovalabel@gmail.com" },
    update: { role: "ADMIN" },
    create: {
      email: "infovalabel@gmail.com",
      name: "VAGA",
      password: adminPassword,
      role: "ADMIN",
    },
  })

  // Catégories
  const hoodies = await db.category.upsert({
    where: { slug: "hoodies" },
    update: {},
    create: { name: "Hoodies", slug: "hoodies" },
  })
  const vestes = await db.category.upsert({
    where: { slug: "vestes" },
    update: {},
    create: { name: "Vestes", slug: "vestes" },
  })
  const accessoires = await db.category.upsert({
    where: { slug: "accessoires" },
    update: {},
    create: { name: "Accessoires", slug: "accessoires" },
  })

  // ─── Collaborateurs (placeholder — à remplacer par les vrais profils) ──────
  const stylist = await db.collaborator.upsert({
    where: { slug: "styliste-exemple" },
    update: {},
    create: {
      name: "[Styliste à définir]",
      slug: "styliste-exemple",
      role: "Styliste",
      photo: UNSPLASH("1654512697681-8434b50096dd"),
      universe:
        "Un vestiaire technique épuré, entre tailoring strict et matières fonctionnelles. Placeholder — remplacer par la bio réelle de la ou du styliste invité.",
      background:
        "Parcours en mode technique, formation en stylisme, expériences en maison de prêt-à-porter. Texte d'exemple à remplacer.",
      influences:
        "Techwear japonais, tailoring d'archive, silhouettes fonctionnelles. Texte d'exemple à remplacer.",
    },
  })

  const artist = await db.collaborator.upsert({
    where: { slug: "artiste-exemple" },
    update: {},
    create: {
      name: "[Artiste à définir]",
      slug: "artiste-exemple",
      role: "Artiste",
      photo: UNSPLASH("1584661156681-540e80a161d3"),
      universe:
        "Peinture gestuelle et matière brute, entre abstraction et geste urbain. Placeholder — remplacer par la bio réelle de l'artiste invité.",
      background:
        "Formation en arts plastiques, expositions en galerie indépendante, collaborations textiles. Texte d'exemple à remplacer.",
      influences:
        "Expressionnisme abstrait, street art, matière et texture. Texte d'exemple à remplacer.",
    },
  })

  // Drop 001 — collaboration Styliste × Artiste
  const drop = await db.drop.upsert({
    where: { slug: "capsule-001" },
    update: {
      name: "Capsule 001 — Néoprène",
      stylistId: stylist.id,
      artistId: artist.id,
      workshopVideoUrl: "https://www.youtube.com/embed/ORjlEpjiHrU",
      coverImage: UNSPLASH("1543053976-476d89a9a0d7"),
    },
    create: {
      name: "Capsule 001 — Néoprène",
      slug: "capsule-001",
      description:
        "La première capsule néoprène. Une collaboration entre un styliste et un artiste, en édition limitée et numérotée.",
      releaseDate: new Date("2026-09-01"),
      status: "UPCOMING",
      stylistId: stylist.id,
      artistId: artist.id,
      workshopVideoUrl: "https://www.youtube.com/embed/ORjlEpjiHrU",
      coverImage: UNSPLASH("1543053976-476d89a9a0d7"),
    },
  })

  // Produits — pièces en édition limitée numérotée
  const products = [
    {
      name: "Hoodie Néoprène Noir",
      slug: "hoodie-neoprene-noir",
      description: "Hoodie technique en néoprène premium 3mm. Coupe oversize, capuche doublée, poche kangourou étanche.",
      price: 24900,
      categoryId: hoodies.id,
      sizes: ["S", "M", "L", "XL"],
      stock: 50,
      editionSize: 50,
    },
    {
      name: "Veste Bomber Tech",
      slug: "veste-bomber-tech",
      description: "Bomber en néoprène avec zip étanche et coupe ergonomique. Résistant à l'eau et au vent.",
      price: 34900,
      categoryId: vestes.id,
      sizes: ["S", "M", "L", "XL"],
      stock: 30,
      editionSize: 30,
    },
    {
      name: "Hoodie Néoprène Electric",
      slug: "hoodie-neoprene-electric",
      description: "Édition accent électrique. Néoprène 3mm avec détails réfléchissants.",
      price: 26900,
      categoryId: hoodies.id,
      sizes: ["M", "L", "XL"],
      stock: 20,
      editionSize: 20,
    },
  ]

  for (const p of products) {
    await db.product.upsert({
      where: { slug: p.slug },
      update: { editionSize: p.editionSize },
      create: { ...p, images: [], dropId: drop.id },
    })
  }

  // ─── Drops 002 à 010 (exemples) ─────────────────────────────────────────────
  // Portraits recyclés sur les 9 drops (variété limitée, contenu de démo).
  const stylistPhotos = [
    "1654512697681-8434b50096dd",
    "1632991727906-8386e1388975",
    "1614010966237-74489a16848b",
    "1614779603758-8d6d2b240e39",
    "1612242879330-cd06b2696e56",
  ]
  const artistPhotos = [
    "1584661156681-540e80a161d3",
    "1752649935525-f8e11cc7864e",
    "1468322638156-074863f9362e",
    "1589051088132-06f36a22012a",
  ]
  const videos = [
    "ORjlEpjiHrU", // Textile Designer Freya
    "DjPfiVk5Bzc", // What is Fashion Atelier?
    "5E4bJYNAa8g", // Inside the Sculpture Studio
    "Tv5aZMKGXjE", // Full-Time Artist's Studio Day
  ]

  // Deux pièces d'exemple par drop, matériaux choisis selon le thème.
  // Sans images propres : la vignette de repli (image du matériau) s'affiche,
  // même mécanisme déjà utilisé pour "Lunettes Futurist" / "Holster Utility" du Drop 001.
  const extraProducts: Record<
    string,
    { name: string; slug: string; description: string; price: number; category: "hoodies" | "vestes" | "accessoires"; materials: string[]; styles: string[]; editionSize: number }[]
  > = {
    "002": [
      { name: "Veste Aquatique 002", slug: "veste-aquatique-002", description: "Veste néoprène étanche, coupe fluide inspirée des combinaisons de plongée.", price: 32900, category: "vestes", materials: ["neoprene", "econyl"], styles: ["etanche", "minimal"], editionSize: 40 },
      { name: "Sac Étanche Aquatique", slug: "sac-etanche-aquatique", description: "Sac bandoulière en Econyl recyclé, fermeture étanche à rouleau.", price: 8900, category: "accessoires", materials: ["econyl", "pu"], styles: ["etanche", "urbain"], editionSize: 60 },
    ],
    "003": [
      { name: "Hoodie Nocturne", slug: "hoodie-nocturne", description: "Hoodie avec empiècements réfléchissants, pensé pour la ville après minuit.", price: 25900, category: "hoodies", materials: ["scotchlite", "fil-reflechissant"], styles: ["urbain", "futuriste"], editionSize: 35 },
      { name: "Veste Nocturne Signal", slug: "veste-nocturne-signal", description: "Veste technique à liserés 3M Scotchlite, visibilité totale en basse lumière.", price: 34900, category: "vestes", materials: ["fil-reflechissant", "neoprene"], styles: ["urbain", "techwear"], editionSize: 25 },
    ],
    "004": [
      { name: "Veste Biomimétique", slug: "veste-biomimetique", description: "Veste en cuir mycélium Mylo, coupe organique inspirée du vivant.", price: 36900, category: "vestes", materials: ["mylo", "pinatex"], styles: ["futuriste", "minimal"], editionSize: 20 },
      { name: "Hoodie Organique", slug: "hoodie-organique", description: "Hoodie en Piñatex, texture proche du cuir végétal, silhouette sculpturale.", price: 24900, category: "hoodies", materials: ["pinatex", "mylo"], styles: ["minimal", "performance"], editionSize: 30 },
    ],
    "005": [
      { name: "Veste Archive Chrome", slug: "veste-archive-chrome", description: "Veste à film prismatique, esthétique chrome rétro-futuriste années 80.", price: 33900, category: "vestes", materials: ["prismatique", "iridescent"], styles: ["futuriste", "urbain"], editionSize: 25 },
      { name: "Casquette Archive", slug: "casquette-archive", description: "Casquette à finition iridescente, clin d'œil à la science-fiction vintage.", price: 6900, category: "accessoires", materials: ["iridescent"], styles: ["urbain", "minimal"], editionSize: 45 },
    ],
    "006": [
      { name: "Hoodie Monochrome", slug: "hoodie-monochrome", description: "Hoodie noir absolu en néoprène traité graphène, minimalisme radical.", price: 26900, category: "hoodies", materials: ["neoprene", "graphene"], styles: ["minimal", "techwear"], editionSize: 40 },
      { name: "Veste Monochrome", slug: "veste-monochrome", description: "Veste aerogel ultra-légère, tout en noir, coupe épurée.", price: 35900, category: "vestes", materials: ["graphene", "aerogel"], styles: ["minimal", "performance"], editionSize: 20 },
    ],
    "007": [
      { name: "Veste Kinetic Performance", slug: "veste-kinetic-performance", description: "Veste Dyneema ultra-résistante, pensée pour le mouvement et la course urbaine.", price: 37900, category: "vestes", materials: ["dyneema", "cordura"], styles: ["performance", "techwear"], editionSize: 30 },
      { name: "Sac Kinetic", slug: "sac-kinetic", description: "Sac technique en Cordura, harnais ergonomique pour le mouvement.", price: 9900, category: "accessoires", materials: ["cordura", "dyneema"], styles: ["performance", "urbain"], editionSize: 50 },
    ],
    "008": [
      { name: "Veste Chimère Hybride", slug: "veste-chimere-hybride", description: "Veste hybride Cordura et Tyvek, patchwork de matières assemblées.", price: 34900, category: "vestes", materials: ["cordura", "tyvek"], styles: ["techwear", "futuriste"], editionSize: 22 },
      { name: "Hoodie Chimère", slug: "hoodie-chimere", description: "Hoodie en assemblage Tyvek et Cordura, textures hybrides sur une même pièce.", price: 25900, category: "hoodies", materials: ["tyvek", "cordura"], styles: ["urbain", "techwear"], editionSize: 30 },
    ],
    "009": [
      { name: "Hoodie Signal Typo", slug: "hoodie-signal-typo", description: "Hoodie à empiècements Scotchlite, signalétique urbaine détournée.", price: 25900, category: "hoodies", materials: ["scotchlite", "conductive"], styles: ["urbain", "futuriste"], editionSize: 35 },
      { name: "Casquette Signal NFC", slug: "casquette-signal-nfc", description: "Casquette à puce NFC intégrée, fibres conductrices, signal et technologie.", price: 7900, category: "accessoires", materials: ["conductive", "nfc"], styles: ["urbain", "techwear"], editionSize: 40 },
    ],
    "010": [
      { name: "Veste Éclipse Réversible", slug: "veste-eclipse-reversible", description: "Veste réversible iridescente/thermochromique, deux identités en une pièce.", price: 36900, category: "vestes", materials: ["iridescent", "thermochromique"], styles: ["futuriste", "minimal"], editionSize: 22 },
      { name: "Hoodie Éclipse", slug: "hoodie-eclipse", description: "Hoodie thermochromique qui révèle un motif au contact de la chaleur corporelle.", price: 26900, category: "hoodies", materials: ["thermochromique", "iridescent"], styles: ["minimal", "futuriste"], editionSize: 28 },
    ],
  }

  const categoryBySlug = { hoodies, vestes, accessoires }

  const extraDrops = [
    {
      n: "002",
      theme: "Aquatique",
      cover: "1559825481-12a05cc00344",
      date: "2026-03-15",
      status: "SOLD_OUT" as const,
      desc: "Une capsule née des profondeurs : silhouettes fluides, finitions étanches, hommage au monde nautique qui a vu naître VALABEL.",
      sUniverse: "Un vestiaire fluide qui épouse le corps comme une seconde peau, pensé pour l'eau autant que pour la ville.",
      sBackground: "Formation en design textile technique, expérience dans le sportswear aquatique avant de rejoindre l'univers streetwear.",
      sInfluences: "Combinaisons de plongée, hydrodynamisme, minimalisme scandinave.",
      aUniverse: "Une peinture liquide, faite de dégradés et de transparences, qui capture le mouvement de l'eau sur la matière.",
      aBackground: "Diplômé en arts visuels, résidences artistiques près de la mer du Nord, premières collaborations textiles en 2024.",
      aInfluences: "Impressionnisme, cyanotypes, courants marins.",
    },
    {
      n: "003",
      theme: "Nocturne",
      cover: "1599060052009-24d6d0b0161c",
      date: "2026-11-20",
      status: "UPCOMING" as const,
      desc: "Conçue pour la ville après minuit : matières réfléchissantes, coupes sombres, une capsule qui s'illumine dans le faisceau des phares.",
      sUniverse: "Un style urbain nocturne, où chaque pièce devient signal dans l'obscurité sans jamais sacrifier l'élégance.",
      sBackground: "Ancien styliste de scène pour des artistes électro, reconverti dans le vêtement technique.",
      sInfluences: "Cyberpunk, culture club, sécurité routière détournée en esthétique.",
      aUniverse: "Un travail sur la lumière artificielle et les néons, entre photographie longue exposition et peinture.",
      aBackground: "Autodidacte, a exposé dans plusieurs friches urbaines avant de percer dans la scène nocturne locale.",
      aInfluences: "Néo-noir, photographie urbaine nocturne, esthétique Blade Runner.",
    },
    {
      n: "004",
      theme: "Biomimétique",
      cover: "1743362064481-48182fd3113b",
      date: "2026-05-10",
      status: "LIVE" as const,
      desc: "Des formes inspirées du vivant : courbes organiques, volumes sculpturaux, une capsule qui interroge la frontière entre corps et matière.",
      sUniverse: "Des patrons pensés comme des organismes : volumes qui respirent, coutures qui suivent des logiques biologiques plutôt que géométriques.",
      sBackground: "Double formation en design produit et stylisme, fascination de longue date pour la biomimétique appliquée au textile.",
      sInfluences: "Architecture organique, exosquelettes, botanique.",
      aUniverse: "Une sculpture blanche et lisse, presque clinique, qui explore des formes proches du vivant sans jamais les imiter tout à fait.",
      aBackground: "Sculpteur formé aux beaux-arts, travaille principalement le plâtre et la résine avant cette première incursion textile.",
      aInfluences: "Hans Arp, formes cellulaires, minimalisme sculptural.",
    },
    {
      n: "005",
      theme: "Archive",
      cover: "1739056238917-d89cd05c48d5",
      date: "2025-12-01",
      status: "SOLD_OUT" as const,
      desc: "Un rétro-futurisme assumé : chromes, courbes des années 80, une capsule qui imagine le futur tel qu'on l'envisageait hier.",
      sUniverse: "Une garde-robe qui pioche dans l'imaginaire futuriste des décennies passées pour construire un futur alternatif assumé.",
      sBackground: "Chineur invétéré de vêtements vintage techniques, a transformé sa collection personnelle en source d'inspiration professionnelle.",
      sInfluences: "Science-fiction des années 80, esthétique chrome, mode spatiale rétro.",
      aUniverse: "Un travail sur le métal liquide et les surfaces réfléchissantes, entre sculpture numérique et objet physique.",
      aBackground: "Formé en design 3D, a fait la transition vers la sculpture physique en explorant les propriétés du métal poli.",
      aInfluences: "Art cinétique, chrome des années 80, futurisme italien.",
    },
    {
      n: "006",
      theme: "Monochrome",
      cover: "1603189343302-e603f7add05a",
      date: "2027-01-15",
      status: "UPCOMING" as const,
      desc: "Le noir absolu comme seul langage : une capsule qui pousse le minimalisme jusqu'à sa limite, où seule la matière fait la différence.",
      sUniverse: "Un vestiaire réduit à l'essentiel : une seule couleur, une infinité de textures, pour laisser parler uniquement la coupe et la matière.",
      sBackground: "Passage par plusieurs maisons de mode minimaliste avant de rejoindre VALABEL pour cette capsule radicale.",
      sInfluences: "Yohji Yamamoto, architecture brutaliste, minimalisme japonais.",
      aUniverse: "Une photographie et une peinture entièrement dans les tons de noir, où seule la lumière sculpte la forme.",
      aBackground: "Photographe de formation, a progressivement intégré la peinture à sa pratique pour explorer la matière du noir.",
      aInfluences: "Pierre Soulages, photographie en clair-obscur, minimalisme radical.",
    },
    {
      n: "007",
      theme: "Kinetic",
      cover: "1759674804375-3d0c038a0a6a",
      date: "2026-07-04",
      status: "LIVE" as const,
      desc: "Une capsule pensée pour le mouvement : coupes articulées, matières extensibles, à la frontière entre streetwear et équipement sportif.",
      sUniverse: "Des vêtements qui suivent le corps en mouvement, pensés pour la course urbaine autant que pour le style.",
      sBackground: "Ancien athlète reconverti en styliste technique, obsédé par l'ergonomie du vêtement en mouvement.",
      sInfluences: "Équipement de course, athletisure, biomécanique.",
      aUniverse: "Un travail photographique sur le flou de mouvement, qui capture la vitesse comme une matière à part entière.",
      aBackground: "Photographe sportif de formation, explore depuis peu les liens entre mouvement et mode.",
      aInfluences: "Photographie de flou cinétique, futurisme italien, culture du running urbain.",
    },
    {
      n: "008",
      theme: "Chimère",
      cover: "1619459074324-33d5f591c53e",
      date: "2027-02-20",
      status: "UPCOMING" as const,
      desc: "L'hybridation des matières comme signature : néoprène, toile technique et tissage traditionnel cohabitent sur une même pièce.",
      sUniverse: "Un travail de patchwork technique où chaque pièce mélange plusieurs matériaux pour créer des textures inédites.",
      sBackground: "Formé en stylisme et en ingénierie textile, passionné par les associations de matières improbables.",
      sInfluences: "Patchwork traditionnel, matériaux composites, artisanat textile mondial.",
      aUniverse: "Une pratique textile qui superpose et assemble des matières brutes pour créer des œuvres hybrides, ni tissage ni sculpture.",
      aBackground: "Artiste textile autodidacte, a exposé ses assemblages de matières dans plusieurs galeries indépendantes.",
      aInfluences: "Arte povera, textile art contemporain, artisanat vernaculaire.",
    },
    {
      n: "009",
      theme: "Signal",
      cover: "1581515290072-58a77ef204ec",
      date: "2026-09-30",
      status: "LIVE" as const,
      desc: "La typographie urbaine comme motif : lettrages, symboles et signalétique détournée habillent cette capsule inspirée du street art.",
      sUniverse: "Un vestiaire qui traite le vêtement comme un mur : surface d'expression, de message et de signal visuel.",
      sBackground: "Ancien graphiste passé au stylisme, garde une approche très typographique de la construction du vêtement.",
      sInfluences: "Typographie urbaine, signalétique industrielle, culture skate.",
      aUniverse: "Un travail de lettrage et de collage inspiré des murs urbains, entre message brut et composition abstraite.",
      aBackground: "Graffeur actif depuis une décennie, a récemment fait entrer sa pratique murale dans des galeries et projets textiles.",
      aInfluences: "Graffiti writing, art urbain, culture DIY.",
    },
    {
      n: "010",
      theme: "Éclipse",
      cover: "1712767117664-6677fb5a6a97",
      date: "2027-04-01",
      status: "UPCOMING" as const,
      desc: "Une capsule sur la dualité lumière-ombre : pièces réversibles, contrastes extrêmes, pensées comme un phénomène qui se dévoile progressivement.",
      sUniverse: "Un vestiaire réversible qui joue sur deux identités opposées, comme deux faces d'un même vêtement.",
      sBackground: "Styliste spécialisé dans les pièces modulables et réversibles, fascination pour les objets à double lecture.",
      sInfluences: "Astronomie, symbolisme du clair-obscur, mode modulable japonaise.",
      aUniverse: "Une pratique photographique centrée sur les phénomènes de lumière rares, entre documentation scientifique et abstraction.",
      aBackground: "Photographe scientifique de formation, voyage pour documenter les phénomènes astronomiques avant de les réinterpréter en atelier.",
      aInfluences: "Photographie astronomique, minimalisme du contraste, art conceptuel.",
    },
  ]

  for (let i = 0; i < extraDrops.length; i++) {
    const d = extraDrops[i]
    const sSlug = `styliste-drop-${d.n}`
    const aSlug = `artiste-drop-${d.n}`

    const s = await db.collaborator.upsert({
      where: { slug: sSlug },
      update: {},
      create: {
        name: `[Styliste — Capsule ${d.n}]`,
        slug: sSlug,
        role: "Styliste",
        photo: UNSPLASH(stylistPhotos[i % stylistPhotos.length]),
        universe: d.sUniverse,
        background: d.sBackground,
        influences: d.sInfluences,
      },
    })
    const a = await db.collaborator.upsert({
      where: { slug: aSlug },
      update: {},
      create: {
        name: `[Artiste — Capsule ${d.n}]`,
        slug: aSlug,
        role: "Artiste",
        photo: UNSPLASH(artistPhotos[i % artistPhotos.length]),
        universe: d.aUniverse,
        background: d.aBackground,
        influences: d.aInfluences,
      },
    })

    const extraDrop = await db.drop.upsert({
      where: { slug: `capsule-${d.n}` },
      update: {
        stylistId: s.id,
        artistId: a.id,
        workshopVideoUrl: `https://www.youtube.com/embed/${videos[i % videos.length]}`,
        coverImage: UNSPLASH(d.cover),
      },
      create: {
        name: `Capsule ${d.n} — ${d.theme}`,
        slug: `capsule-${d.n}`,
        description: d.desc,
        releaseDate: new Date(d.date),
        status: d.status,
        stylistId: s.id,
        artistId: a.id,
        workshopVideoUrl: `https://www.youtube.com/embed/${videos[i % videos.length]}`,
        coverImage: UNSPLASH(d.cover),
      },
    })

    const dropStock = d.status === "SOLD_OUT" ? 0 : 25
    for (const p of extraProducts[d.n] ?? []) {
      await db.product.upsert({
        where: { slug: p.slug },
        update: { editionSize: p.editionSize, stock: dropStock },
        create: {
          name: p.name,
          slug: p.slug,
          description: p.description,
          price: p.price,
          categoryId: categoryBySlug[p.category].id,
          sizes: p.category === "accessoires" ? [] : ["S", "M", "L", "XL"],
          materials: p.materials,
          styles: p.styles,
          stock: dropStock,
          editionSize: p.editionSize,
          images: [],
          dropId: extraDrop.id,
        },
      })
    }
  }

  // ─── Drop O.M.T — One More Time ─────────────────────────────────────────────
  // Premier drop conçu selon le trio VALABEL : styliste (réalisation) ×
  // graphiste (branding) × agent IA (conceptualisation). Thème : un alter ego
  // artistique en duo (beatmaker + MC), deux palettes pour une seule signature.

  const proto = await db.collaborator.upsert({
    where: { slug: "proto-agent-ia-valabel" },
    update: {},
    create: {
      name: "PROTO",
      slug: "proto-agent-ia-valabel",
      role: "Agent IA",
      isAI: true,
      photo: null,
      universe:
        "Agent de conceptualisation VALABEL : à partir d'un thème, PROTO génère les premières pistes — silhouettes, familles de matières, structure de gamme — que le styliste et le graphiste font ensuite exister.",
      background:
        "Entraîné sur les principes de marque VALABEL (drops limités, matières techniques, D2C) et sur un corpus de références avant-gardistes. Ne dessine pas la collection finale : il pose le brief visuel de départ, révisé et exécuté par l'équipe humaine.",
      influences:
        "ACRONYM (acrn.com), Guerrilla-Group (guerrilla-group.co), Demobaza (demobaza.com), Boris Bidjan Saberi (borisbidjansaberi.com).",
    },
  })

  const omtStylist = await db.collaborator.upsert({
    where: { slug: "styliste-omt" },
    update: {},
    create: {
      name: "[Styliste — O.M.T]",
      slug: "styliste-omt",
      role: "Styliste",
      photo: UNSPLASH("1614010966237-74489a16848b"),
      universe:
        "Un vestiaire de scène pensé comme un uniforme technique : volumes utilitaires, superpositions, une seule silhouette déclinée en deux teintes opposées.",
      background:
        "Formation en construction technique du vêtement, expérience en stagewear pour artistes électro et hip-hop, habitué aux contraintes du live (mouvement, durabilité, lisibilité de scène).",
      influences: "ACRONYM, Guerrilla-Group, Demobaza, Boris Bidjan Saberi — le drapé utilitaire et les teintures brutes.",
    },
  })

  const omtGraphiste = await db.collaborator.upsert({
    where: { slug: "graphiste-omt" },
    update: {},
    create: {
      name: "[Graphiste — O.M.T]",
      slug: "graphiste-omt",
      role: "Graphiste",
      photo: UNSPLASH("1468322638156-074863f9362e"),
      universe:
        "Une identité visuelle pour un duo qui n'existe que sur scène : un monogramme unique qui se lit à deux vitesses, une pour le beatmaker, une pour le MC.",
      background:
        "Formation en design graphique et typographie, expérience en pochettes d'album et merchandising musical, traite l'identité de marque comme un système modulaire.",
      influences: "Pochettes électro/hip-hop, typographie utilitaire militaire, systèmes de logo modulaires.",
    },
  })

  const omtDrop = await db.drop.upsert({
    where: { slug: "omt" },
    update: {
      stylistId: omtStylist.id,
      artistId: omtGraphiste.id,
      aiAgentId: proto.id,
      coverImage: UNSPLASH("1764258560214-71d5f28852d0"),
    },
    create: {
      name: "O.M.T — One More Time",
      slug: "omt",
      description:
        "Un alter ego artistique en duo : un beatmaker et une MC réunis sous un même nom de scène. VALABEL habille leur univers scénique — deux palettes, une seule signature : mauve nuit et orange fluo côté beatmaker, kaki et vert phosphorescent côté MC.",
      releaseDate: new Date("2027-03-01"),
      status: "UPCOMING",
      stylistId: omtStylist.id,
      artistId: omtGraphiste.id,
      aiAgentId: proto.id,
      coverImage: UNSPLASH("1764258560214-71d5f28852d0"),
    },
  })

  const accessoiresOmt = await db.category.upsert({
    where: { slug: "accessoires" },
    update: {},
    create: { name: "Accessoires", slug: "accessoires" },
  })

  const omtProducts = [
    {
      name: "Hoodie Beatmaker — Mauve Nuit",
      slug: "hoodie-beatmaker-mauve-nuit",
      description: "Hoodie technique mauve nuit, empiècements réfléchissants orange fluo. Ligne Beatmaker de la capsule O.M.T.",
      price: 25900,
      category: hoodies,
      materials: ["neoprene", "scotchlite"],
      styles: ["minimal", "urbain"],
      editionSize: 35,
    },
    {
      name: "Veste Technique Beatmaker — Zip Orange",
      slug: "veste-beatmaker-zip-orange",
      description: "Veste technique mauve nuit, zip et tirettes orange fluo. Ligne Beatmaker de la capsule O.M.T.",
      price: 34900,
      category: vestes,
      materials: ["neoprene", "scotchlite"],
      styles: ["techwear", "futuriste"],
      editionSize: 25,
    },
    {
      name: "Casquette O.M.T Beatmaker",
      slug: "casquette-omt-beatmaker",
      description: "Casquette mauve nuit à liseré orange fluo. Merchandising de la ligne Beatmaker.",
      price: 5900,
      category: accessoiresOmt,
      materials: ["scotchlite"],
      styles: ["urbain", "minimal"],
      editionSize: 50,
    },
    {
      name: "Hoodie MC — Kaki Phosphor",
      slug: "hoodie-mc-kaki-phosphor",
      description: "Hoodie kaki utilitaire, empiècements photoluminescents vert phosphorescent. Ligne MC de la capsule O.M.T.",
      price: 25900,
      category: hoodies,
      materials: ["cordura", "photoluminescent"],
      styles: ["techwear", "urbain"],
      editionSize: 35,
    },
    {
      name: "Veste Utility MC — Kaki",
      slug: "veste-utility-mc-kaki",
      description: "Veste utilitaire kaki multipoches, détails vert phosphorescent. Ligne MC de la capsule O.M.T.",
      price: 34900,
      category: vestes,
      materials: ["cordura", "photoluminescent"],
      styles: ["techwear", "performance"],
      editionSize: 25,
    },
    {
      name: "Sac Banane O.M.T MC",
      slug: "sac-banane-omt-mc",
      description: "Sac banane kaki à surpiqûres vert phosphorescent. Merchandising de la ligne MC.",
      price: 6900,
      category: accessoiresOmt,
      materials: ["cordura", "photoluminescent"],
      styles: ["urbain", "performance"],
      editionSize: 50,
    },
  ]

  for (const p of omtProducts) {
    await db.product.upsert({
      where: { slug: p.slug },
      update: { editionSize: p.editionSize },
      create: {
        name: p.name,
        slug: p.slug,
        description: p.description,
        price: p.price,
        categoryId: p.category.id,
        sizes: ["S", "M", "L", "XL"],
        materials: p.materials,
        styles: p.styles,
        stock: 0, // capsule en conceptualisation, pas encore produite
        editionSize: p.editionSize,
        images: [],
        dropId: omtDrop.id,
      },
    })
  }

  console.log("Seed terminé.")
}

main()
  .catch((e) => {
    console.error(e)
    process.exit(1)
  })
  .finally(async () => {
    await db.$disconnect()
    await pool.end()
  })
