-- #migration 2026_09_20_001
-- Page prévente/vente par artisan — CDC "page-prevente-vente-artisan".
-- Une page par artisan, en deux temps : prévente (chrono + places limitées)
-- puis bascule automatique en vente standard, ou liste d'attente si les
-- places sont épuisées avant l'échéance. Bascule calculée à la lecture
-- (pas de cron), voir _prevente_calcule_statut() dans _prevente.php.

CREATE TABLE IF NOT EXISTS artisan_prevente_pages (
  id                     VARCHAR(40)  NOT NULL PRIMARY KEY,
  user_id                VARCHAR(40)  NOT NULL,          -- l'artisan (users.id)
  slug                   VARCHAR(100) NOT NULL UNIQUE,    -- réutilise le slug de la page perso (uluana.art/artisans/{slug})
  titre                  VARCHAR(150) NOT NULL DEFAULT '',
  sous_titre             VARCHAR(255) NULL,
  vsl_url                VARCHAR(500) NULL,               -- vidéo de présentation/vente
  conditions_livraison   TEXT NULL,
  conditions_remboursement TEXT NULL,
  date_debut_prevente    DATETIME     NOT NULL,
  date_fin_prevente      DATETIME     NOT NULL,
  nb_places_max          INT UNSIGNED NOT NULL DEFAULT 100,
  nb_places_vendues      INT UNSIGNED NOT NULL DEFAULT 0, -- dénormalisé, mis à jour à chaque commande payée
  statut_force           ENUM('auto','prevente','vente_standard','liste_attente') NOT NULL DEFAULT 'auto', -- 'auto' = calculé depuis les dates/places ; override manuel possible
  actif                  TINYINT(1)   NOT NULL DEFAULT 1,
  created_at             DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at             DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
  INDEX idx_pp_user (user_id),
  INDEX idx_pp_slug (slug)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS artisan_prevente_pieces (
  id                VARCHAR(40)  NOT NULL PRIMARY KEY,
  page_id           VARCHAR(40)  NOT NULL,
  titre             VARCHAR(150) NOT NULL DEFAULT '',
  description       TEXT NULL,
  prix_prevente_cents INT UNSIGNED NOT NULL DEFAULT 0,
  prix_standard_cents INT UNSIGNED NOT NULL DEFAULT 0,
  photo_url         VARCHAR(500) NULL,
  ordre             INT UNSIGNED NOT NULL DEFAULT 0,
  actif             TINYINT(1)   NOT NULL DEFAULT 1,
  created_at        DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at        DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (page_id) REFERENCES artisan_prevente_pages(id) ON DELETE CASCADE,
  INDEX idx_ppi_page (page_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS artisan_prevente_bonus (
  id          VARCHAR(40)  NOT NULL PRIMARY KEY,
  page_id     VARCHAR(40)  NOT NULL,
  titre       VARCHAR(150) NOT NULL DEFAULT '',
  description TEXT NULL,
  ordre       INT UNSIGNED NOT NULL DEFAULT 0,
  created_at  DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (page_id) REFERENCES artisan_prevente_pages(id) ON DELETE CASCADE,
  INDEX idx_pb_page (page_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS artisan_prevente_avis (
  id          VARCHAR(40)  NOT NULL PRIMARY KEY,
  page_id     VARCHAR(40)  NOT NULL,
  auteur_nom  VARCHAR(150) NOT NULL DEFAULT '',
  note        TINYINT UNSIGNED NOT NULL DEFAULT 5, -- 1-5
  texte       TEXT NULL,
  photo_url   VARCHAR(500) NULL,
  ordre       INT UNSIGNED NOT NULL DEFAULT 0,
  created_at  DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (page_id) REFERENCES artisan_prevente_pages(id) ON DELETE CASCADE,
  INDEX idx_pa_page (page_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS artisan_prevente_realisations (
  id         VARCHAR(40)  NOT NULL PRIMARY KEY,
  page_id    VARCHAR(40)  NOT NULL,
  photo_url  VARCHAR(500) NOT NULL,
  legende    VARCHAR(255) NULL,
  ordre      INT UNSIGNED NOT NULL DEFAULT 0,
  created_at DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (page_id) REFERENCES artisan_prevente_pages(id) ON DELETE CASCADE,
  INDEX idx_pr_page (page_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Commandes passées par des acheteurs (pas forcément des membres Uluana —
-- achat public sans compte, email/nom saisis au moment du paiement).
CREATE TABLE IF NOT EXISTS artisan_prevente_commandes (
  id                    VARCHAR(40)  NOT NULL PRIMARY KEY,
  page_id               VARCHAR(40)  NOT NULL,
  piece_id              VARCHAR(40)  NOT NULL,
  acheteur_nom          VARCHAR(150) NOT NULL DEFAULT '',
  acheteur_email        VARCHAR(190) NOT NULL,
  payment_intent_id     VARCHAR(64)  NULL,
  montant_cents         INT UNSIGNED NOT NULL DEFAULT 0,
  phase_achat           ENUM('prevente','vente_standard') NOT NULL DEFAULT 'prevente',
  statut_fabrication    ENUM('paye','en_fabrication','expedie','livre') NOT NULL DEFAULT 'paye',
  offre_premium_proposee TINYINT(1)  NOT NULL DEFAULT 0, -- "close" post-livraison, proposé une seule fois
  created_at            DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at            DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (page_id) REFERENCES artisan_prevente_pages(id) ON DELETE CASCADE,
  FOREIGN KEY (piece_id) REFERENCES artisan_prevente_pieces(id) ON DELETE CASCADE,
  INDEX idx_pc_page (page_id),
  INDEX idx_pc_email (acheteur_email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Mises à jour envoyées à l'acheteur pendant la fabrication (photos atelier,
-- avancement) — visibles par l'acheteur concerné (par email) et par
-- l'ensemble des acheteurs de la commande (communauté du lancement).
CREATE TABLE IF NOT EXISTS artisan_prevente_updates (
  id         VARCHAR(40)  NOT NULL PRIMARY KEY,
  page_id    VARCHAR(40)  NOT NULL,
  texte      TEXT NULL,
  photo_url  VARCHAR(500) NULL,
  created_at DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (page_id) REFERENCES artisan_prevente_pages(id) ON DELETE CASCADE,
  INDEX idx_pu_page (page_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Métriques simples (reach/clics/conversion), un événement par ligne —
-- agrégées à la lecture par page et par jour.
CREATE TABLE IF NOT EXISTS artisan_prevente_metrics (
  id         INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  page_id    VARCHAR(40)  NOT NULL,
  type       ENUM('vue','clic_achat','paiement') NOT NULL,
  created_at DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (page_id) REFERENCES artisan_prevente_pages(id) ON DELETE CASCADE,
  INDEX idx_pm_page_type (page_id, type),
  INDEX idx_pm_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
