-- Mise a jour SuitePro SaaS - Juin 2026
-- Mediatheque photos publiques et articles utiles administrables.

CREATE TABLE IF NOT EXISTS site_photos (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  company_id INT UNSIGNED NULL,
  stored_name VARCHAR(190) NOT NULL,
  original_name VARCHAR(190),
  mime_type VARCHAR(120) NOT NULL,
  alt_text VARCHAR(255) NOT NULL,
  caption VARCHAR(255),
  service_slug VARCHAR(120),
  city_slug VARCHAR(120),
  placement ENUM('accueil','service','article','zone','general') NOT NULL DEFAULT 'general',
  status ENUM('publiee','masquee') NOT NULL DEFAULT 'publiee',
  created_by INT UNSIGNED NULL,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
  CONSTRAINT fk_site_photos_user FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL,
  INDEX idx_site_photos_status (status),
  INDEX idx_site_photos_company (company_id),
  INDEX idx_site_photos_service (service_slug),
  INDEX idx_site_photos_city (city_slug),
  INDEX idx_site_photos_placement (placement)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS blog_posts (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  company_id INT UNSIGNED NULL,
  slug VARCHAR(160) NOT NULL,
  title VARCHAR(190) NOT NULL,
  meta_description VARCHAR(255) NOT NULL,
  h1 VARCHAR(190) NOT NULL,
  excerpt TEXT,
  body TEXT NOT NULL,
  service_slug VARCHAR(120),
  status ENUM('brouillon','publie') NOT NULL DEFAULT 'publie',
  published_at DATETIME NULL,
  created_by INT UNSIGNED NULL,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
  CONSTRAINT fk_blog_posts_user FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL,
  INDEX idx_blog_posts_status (status),
  INDEX idx_blog_posts_company (company_id),
  INDEX idx_blog_posts_slug (slug),
  INDEX idx_blog_posts_service (service_slug),
  UNIQUE KEY uniq_blog_posts_company_slug (company_id, slug)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

SET @demo_company_id = (SELECT id FROM companies WHERE slug='saas-demo' LIMIT 1);

DELETE FROM blog_posts
WHERE company_id=@demo_company_id
  AND slug IN ('preparer-intervention-artisan', 'devis-clair-travaux-services', 'planifier-chantier-client');

INSERT INTO blog_posts (company_id, slug, title, meta_description, h1, excerpt, body, service_slug, status, published_at)
VALUES
(@demo_company_id, 'preparer-nettoyage-fin-de-bail', 'Comment préparer un nettoyage de fin de bail ?', 'Checklist nettoyage fin de bail: pièces, cuisine, sanitaires, vitres, stores, balcon, cave, accès et photos utiles.', 'Comment préparer un nettoyage de fin de bail ?', 'Une demande complète aide l’entreprise à chiffrer juste et à éviter les oublis avant l’état des lieux.', 'Un nettoyage de fin de bail se prépare avec les informations essentielles: nombre de pièces, surface, cuisine, sanitaires, vitres, stores, balcon, cave, garage, accès, étage et délai avant état des lieux.\n\nDes photos permettent de comprendre l’état du logement et les points sensibles. L’entreprise peut ensuite confirmer le périmètre, les options et le planning.\n\nUn devis clair indique ce qui est inclus, les conditions, la validité et les prochaines étapes.', 'nettoyage-fin-de-bail', 'publie', NOW()),
(@demo_company_id, 'devis-clair-nettoyage', 'Devis de nettoyage: les éléments à faire apparaître', 'Les points essentiels d’un devis professionnel de nettoyage: prestation, fréquence, surface, TVA, conditions, validité et options.', 'Devis de nettoyage: les éléments à faire apparaître', 'Un devis lisible rassure le client et limite les malentendus avant l’intervention.', 'Un devis de nettoyage doit présenter le client, le lieu, le type de prestation, la surface, les quantités, les options, la TVA, l’acompte éventuel et les conditions.\n\nLa description doit préciser ce qui est inclus: sols, vitres, sanitaires, cuisine, stores, consommables, accès ou fréquence.\n\nUne fois accepté, le devis peut être converti en passage, contrat récurrent ou facture afin de garder une chaîne commerciale cohérente.', 'nettoyage-regulier', 'publie', NOW()),
(@demo_company_id, 'planifier-passages-nettoyage', 'Planifier les passages de nettoyage sans perdre le suivi client', 'Organisation d’un planning de nettoyage: confirmations, employés assignés, commentaires internes, messages et facturation.', 'Planifier les passages de nettoyage sans perdre le suivi client', 'Le planning devient plus fiable quand les informations commerciales et terrain restent au même endroit.', 'La planification d’un passage de nettoyage ne consiste pas seulement à choisir une date. Il faut assigner les bonnes personnes, garder les commentaires internes, confirmer les horaires au client et suivre l’état de l’intervention.\n\nUn espace client simplifie les échanges: le client retrouve ses devis, factures et messages sans chercher dans ses emails.\n\nPour l’entreprise, les interventions terminées peuvent alimenter les avis, les factures et l’historique client.', 'nettoyage-regulier', 'publie', NOW())
ON DUPLICATE KEY UPDATE
  company_id = VALUES(company_id),
  title = VALUES(title),
  meta_description = VALUES(meta_description),
  h1 = VALUES(h1),
  excerpt = VALUES(excerpt),
  body = VALUES(body),
  service_slug = VALUES(service_slug),
  status = VALUES(status),
  updated_at = CURRENT_TIMESTAMP;
