-- Seed 6 default published scenarios for the admin catalog.
-- This project uses Supabase/Postgres, so this script is written for the Supabase SQL editor.

begin;

insert into public.scenario_templates (
  id,
  slug,
  status,
  current_published_version_id,
  current_draft_version_id,
  created_at,
  updated_at
)
values
  (
    '6427d91d-e6c9-4a9f-bcd2-1383ee497ddc',
    'feedback-performance',
    'published',
    null,
    null,
    timezone('utc', now()),
    timezone('utc', now())
  ),
  (
    'cd0f6f80-0f08-476d-83bf-cbdbe29d0aaa',
    'interpersonal-conflict',
    'published',
    null,
    null,
    timezone('utc', now()),
    timezone('utc', now())
  ),
  (
    '19594497-2746-484d-b197-ac7c52cb4684',
    'burnout-risk',
    'published',
    null,
    null,
    timezone('utc', now()),
    timezone('utc', now())
  ),
  (
    '1fe5d948-1f74-475a-ba54-2607fe2c74ee',
    'change-resistance',
    'published',
    null,
    null,
    timezone('utc', now()),
    timezone('utc', now())
  ),
  (
    '57940a41-a2bc-4b4b-ab45-cdf1150f6d4a',
    'remote-disengagement',
    'published',
    null,
    null,
    timezone('utc', now()),
    timezone('utc', now())
  ),
  (
    '22c85194-a07b-4afa-92fc-148f52d165a4',
    'promotion-disappointment',
    'published',
    null,
    null,
    timezone('utc', now()),
    timezone('utc', now())
  )
on conflict (id) do update
set
  slug = excluded.slug,
  status = excluded.status,
  current_published_version_id = excluded.current_published_version_id,
  current_draft_version_id = excluded.current_draft_version_id,
  updated_at = timezone('utc', now());

insert into public.scenario_versions (
  id,
  template_id,
  version_number,
  status,
  payload,
  title,
  target_skill,
  difficulty,
  duration_label,
  short_brief,
  published_at,
  created_at,
  updated_at
)
values
  (
    '60ff47ea-1f0c-43be-9552-557b40883d8b',
    '6427d91d-e6c9-4a9f-bcd2-1383ee497ddc',
    1,
    'published',
    '{
      "id": "feedback-performance",
      "title": "Recadrer une baisse de performance",
      "targetSkill": "Feedback & responsabilisation",
      "difficulty": "Fondamentaux",
      "durationLabel": "8 tours max",
      "shortBrief": "Un collaborateur livre moins bien depuis six semaines et se montre deja sur la defensive. Votre enjeu est de traiter le sujet sans l humilier ni contourner l exigence.",
      "employeeProfile": {
        "name": "Lucas",
        "role": "Charge de clientele grands comptes",
        "team": "Pole relation client",
        "seniority": "3 ans d anciennete",
        "currentMood": "agace, convaincu de faire de son mieux"
      },
      "openingMessage": "Honnetement, je ne comprends pas trop pourquoi on se voit. J ai l impression qu on me tombe dessus alors que la charge n a jamais ete aussi forte.",
      "managerGoal": "Nommer la baisse de performance, comprendre les causes et terminer sur un plan d action clair et partage.",
      "successSignals": [
        "Nommer des faits precis sans attaquer la personne",
        "Explorer les causes avant de prescrire une solution",
        "Conclure sur des engagements concrets et dates"
      ],
      "failureSignals": [
        "Accuser ou moraliser",
        "Negocier a la baisse les attentes de base",
        "Laisser l echange se refermer sans plan d action"
      ],
      "completionRules": [
        "Resolu si Lucas reconnait les faits et accepte un plan de progression.",
        "Escalade si Lucas se ferme totalement ou quitte l echange sur un sentiment d injustice."
      ],
      "metricWeights": {
        "empathy": 1.05,
        "clarity": 1.25,
        "questioning": 1,
        "deescalation": 0.95,
        "accountability": 1.3,
        "action_alignment": 1.25
      },
      "maxTurns": 8,
      "tensionColor": "#1775BA"
    }'::jsonb,
    'Recadrer une baisse de performance',
    'Feedback & responsabilisation',
    'Fondamentaux',
    '8 tours max',
    'Un collaborateur livre moins bien depuis six semaines et se montre deja sur la defensive. Votre enjeu est de traiter le sujet sans l humilier ni contourner l exigence.',
    timezone('utc', now()),
    timezone('utc', now()),
    timezone('utc', now())
  ),
  (
    '16afa11f-42af-424e-bee4-ecb1b70afbc5',
    'cd0f6f80-0f08-476d-83bf-cbdbe29d0aaa',
    1,
    'published',
    '{
      "id": "interpersonal-conflict",
      "title": "Apaiser un conflit interpersonnel",
      "targetSkill": "Mediation & apaisement",
      "difficulty": "Intermédiaire",
      "durationLabel": "9 tours max",
      "shortBrief": "Une collaboratrice arrive a l entretien avec beaucoup d emotion apres plusieurs tensions avec un collegue. Vous devez l aider a sortir du face a face accusatoire.",
      "employeeProfile": {
        "name": "Sonia",
        "role": "Cheffe de projet",
        "team": "Transformation digitale",
        "seniority": "5 ans d anciennete",
        "currentMood": "blessee et tres remontee"
      },
      "openingMessage": "Je vais etre directe : si rien ne change avec Mehdi, je ne me vois pas continuer comme ca. A chaque reunion, il me coupe et remet tout en cause.",
      "managerGoal": "Faire redescendre la tension, distinguer faits et ressentis, puis cadrer une suite acceptable pour Sonia.",
      "successSignals": [
        "Reconnaitre l emotion sans l alimenter",
        "Faire preciser des faits observables",
        "Poser un cadre de suite juste et concret"
      ],
      "failureSignals": [
        "Prendre parti trop vite",
        "Minimiser le ressenti de Sonia",
        "Rester dans le flou sur la suite a donner"
      ],
      "completionRules": [
        "Resolu si Sonia se sent entendue et accepte une suite structuree.",
        "Escalade si la tension augmente ou si Sonia annonce son retrait du projet."
      ],
      "metricWeights": {
        "empathy": 1.25,
        "clarity": 0.95,
        "questioning": 1.05,
        "deescalation": 1.35,
        "accountability": 0.9,
        "action_alignment": 1.1
      },
      "maxTurns": 9,
      "tensionColor": "#9F1918"
    }'::jsonb,
    'Apaiser un conflit interpersonnel',
    'Mediation & apaisement',
    'Intermédiaire',
    '9 tours max',
    'Une collaboratrice arrive a l entretien avec beaucoup d emotion apres plusieurs tensions avec un collegue. Vous devez l aider a sortir du face a face accusatoire.',
    timezone('utc', now()),
    timezone('utc', now()),
    timezone('utc', now())
  ),
  (
    'beb0abb5-e918-43fb-9d9a-5ab2704de514',
    '19594497-2746-484d-b197-ac7c52cb4684',
    1,
    'published',
    '{
      "id": "burnout-risk",
      "title": "Detecter un risque d epuisement",
      "targetSkill": "Prevention & soutien",
      "difficulty": "Exigeant",
      "durationLabel": "8 tours max",
      "shortBrief": "Une collaboratrice performante donne des signaux de fatigue avancee, mais refuse de se decrire comme en difficulte. Vous devez ouvrir un espace sur sans la pousser a se braquer.",
      "employeeProfile": {
        "name": "Nadia",
        "role": "Responsable marketing acquisition",
        "team": "Growth",
        "seniority": "2 ans d anciennete",
        "currentMood": "epuisee mais en controle apparent"
      },
      "openingMessage": "Je vais bien, vraiment. Je dors un peu moins, c est tout. On a des objectifs ambitieux et je n ai pas envie qu on dramatise.",
      "managerGoal": "Faire emerger le niveau reel de fatigue, obtenir un accord sur des mesures de protection et eviter le deni managerial.",
      "successSignals": [
        "Creer un espace de securite psychologique",
        "Reformuler sans pathologiser",
        "Convenir d ajustements rapides et de suivi"
      ],
      "failureSignals": [
        "Banaliser les signaux faibles",
        "Transformer l echange en controle de performance",
        "Laisser Nadia repartir sans filet de protection"
      ],
      "completionRules": [
        "Resolu si Nadia accepte des mesures de protection ou un suivi rapproche.",
        "Escalade si Nadia repart en se sentant incomprise ou si le manager nie les signaux."
      ],
      "metricWeights": {
        "empathy": 1.35,
        "clarity": 0.9,
        "questioning": 1.15,
        "deescalation": 1.15,
        "accountability": 0.85,
        "action_alignment": 1.2
      },
      "maxTurns": 8,
      "tensionColor": "#C1161B"
    }'::jsonb,
    'Detecter un risque d epuisement',
    'Prevention & soutien',
    'Exigeant',
    '8 tours max',
    'Une collaboratrice performante donne des signaux de fatigue avancee, mais refuse de se decrire comme en difficulte. Vous devez ouvrir un espace sur sans la pousser a se braquer.',
    timezone('utc', now()),
    timezone('utc', now()),
    timezone('utc', now())
  ),
  (
    '5d6632cb-69a6-47da-b96c-a49036ace572',
    '1fe5d948-1f74-475a-ba54-2607fe2c74ee',
    1,
    'published',
    '{
      "id": "change-resistance",
      "title": "Gerer une resistance au changement",
      "targetSkill": "Influence & engagement",
      "difficulty": "Intermédiaire",
      "durationLabel": "9 tours max",
      "shortBrief": "Un collaborateur senior conteste ouvertement le nouveau mode de fonctionnement et influence le reste de l equipe. Vous devez recadrer sans casser la relation.",
      "employeeProfile": {
        "name": "Marc",
        "role": "Responsable ADV senior",
        "team": "Administration des ventes",
        "seniority": "11 ans d anciennete",
        "currentMood": "sceptique et ironique"
      },
      "openingMessage": "Je vais vous dire franchement : ce nouveau process n a aucun sens. On fait perdre du temps a tout le monde et personne du terrain n a ete consulte.",
      "managerGoal": "Accueillir les objections utiles, recadrer les comportements de sabotage et rechercher un engagement minimal honnete.",
      "successSignals": [
        "Distinguer les objections de fond du refus de cooperation",
        "Reconnaitre l expertise de Marc sans ceder le cadre",
        "Obtenir un engagement concret sur la suite"
      ],
      "failureSignals": [
        "Entrer dans un bras de fer d ego",
        "Promettre de tout remettre en question sans arbitrage",
        "Eviter le sujet du comportement en equipe"
      ],
      "completionRules": [
        "Resolu si Marc accepte d essayer le nouveau cadre sans le saboter.",
        "Escalade si Marc repart conforte dans l opposition ouverte."
      ],
      "metricWeights": {
        "empathy": 1,
        "clarity": 1.2,
        "questioning": 1.05,
        "deescalation": 1,
        "accountability": 1.25,
        "action_alignment": 1.2
      },
      "maxTurns": 9,
      "tensionColor": "#6A1D41"
    }'::jsonb,
    'Gerer une resistance au changement',
    'Influence & engagement',
    'Intermédiaire',
    '9 tours max',
    'Un collaborateur senior conteste ouvertement le nouveau mode de fonctionnement et influence le reste de l equipe. Vous devez recadrer sans casser la relation.',
    timezone('utc', now()),
    timezone('utc', now()),
    timezone('utc', now())
  ),
  (
    '5111487b-8f8b-4fa3-af84-c4b75d367082',
    '57940a41-a2bc-4b4b-ab45-cdf1150f6d4a',
    1,
    'published',
    '{
      "id": "remote-disengagement",
      "title": "Reengager un collaborateur distant",
      "targetSkill": "Coaching & alignment",
      "difficulty": "Fondamentaux",
      "durationLabel": "8 tours max",
      "shortBrief": "Un membre d equipe a distance se montre discret, tarde a repondre et se coupe des rituels collectifs. Vous devez reengager sans tomber dans le controle sec.",
      "employeeProfile": {
        "name": "Camille",
        "role": "Product designer",
        "team": "Produit",
        "seniority": "1 an d anciennete",
        "currentMood": "detachee, un peu desabusee"
      },
      "openingMessage": "J imagine que vous voulez parler du fait que je parle moins en reunion. Franchement, j ai surtout l impression que ca ne change rien que je sois la ou pas.",
      "managerGoal": "Comprendre la perte d engagement, retisser le lien et recadrer les attentes de contribution a distance.",
      "successSignals": [
        "Explorer le sentiment de deconnexion sans juger",
        "Clarifier les attentes de presence et de contribution",
        "Construire une suite realiste pour reengager Camille"
      ],
      "failureSignals": [
        "Confondre retrait et mauvaise volonte",
        "Rester vague sur les attentes",
        "Promettre un changement global sans action locale"
      ],
      "completionRules": [
        "Resolu si Camille exprime ses freins et s engage sur un prochain pas.",
        "Escalade si elle se ferme davantage ou si l echange devient purement defensif."
      ],
      "metricWeights": {
        "empathy": 1.2,
        "clarity": 1,
        "questioning": 1.15,
        "deescalation": 1.05,
        "accountability": 0.95,
        "action_alignment": 1.15
      },
      "maxTurns": 8,
      "tensionColor": "#D88E04"
    }'::jsonb,
    'Reengager un collaborateur distant',
    'Coaching & alignment',
    'Fondamentaux',
    '8 tours max',
    'Un membre d equipe a distance se montre discret, tarde a repondre et se coupe des rituels collectifs. Vous devez reengager sans tomber dans le controle sec.',
    timezone('utc', now()),
    timezone('utc', now()),
    timezone('utc', now())
  ),
  (
    '45663c2a-0648-4861-bcc2-11f4ad0bdf4d',
    '22c85194-a07b-4afa-92fc-148f52d165a4',
    1,
    'published',
    '{
      "id": "promotion-disappointment",
      "title": "Accueillir une deception de promotion",
      "targetSkill": "Ecoute & recadrage",
      "difficulty": "Intermédiaire",
      "durationLabel": "8 tours max",
      "shortBrief": "Un collaborateur pensait obtenir une promotion cette annee. Il arrive a l entretien decu, amer et avec une confiance fragilisee. Vous devez traiter la deception sans promettre ce qui n est pas arbitre.",
      "employeeProfile": {
        "name": "Yanis",
        "role": "Business analyst",
        "team": "Finance transformation",
        "seniority": "4 ans d anciennete",
        "currentMood": "decu, vexe, en attente d explications"
      },
      "openingMessage": "Je prefere etre direct : j ai du mal a avaler la decision. J ai porte des sujets majeurs toute l annee et j ai l impression qu on m a fait miroiter quelque chose.",
      "managerGoal": "Accueillir la frustration, clarifier les criteres et aboutir a une trajectoire credible de progression sans faux espoir.",
      "successSignals": [
        "Laisser une place reelle a la deception",
        "Expliquer la decision avec clarte et respect",
        "Construire des prochaines etapes concretes"
      ],
      "failureSignals": [
        "Se justifier trop tot",
        "Promettre une prochaine promotion sans base solide",
        "Sortir de l echange sans criteres explicites"
      ],
      "completionRules": [
        "Resolu si Yanis comprend la decision et repart avec un plan de progression precis.",
        "Escalade si Yanis repart en rupture de confiance ou sur une promesse floue."
      ],
      "metricWeights": {
        "empathy": 1.2,
        "clarity": 1.2,
        "questioning": 1,
        "deescalation": 1.1,
        "accountability": 1,
        "action_alignment": 1.2
      },
      "maxTurns": 8,
      "tensionColor": "#375E97"
    }'::jsonb,
    'Accueillir une deception de promotion',
    'Ecoute & recadrage',
    'Intermédiaire',
    '8 tours max',
    'Un collaborateur pensait obtenir une promotion cette annee. Il arrive a l entretien decu, amer et avec une confiance fragilisee. Vous devez traiter la deception sans promettre ce qui n est pas arbitre.',
    timezone('utc', now()),
    timezone('utc', now()),
    timezone('utc', now())
  )
on conflict (id) do update
set
  template_id = excluded.template_id,
  version_number = excluded.version_number,
  status = excluded.status,
  payload = excluded.payload,
  title = excluded.title,
  target_skill = excluded.target_skill,
  difficulty = excluded.difficulty,
  duration_label = excluded.duration_label,
  short_brief = excluded.short_brief,
  published_at = excluded.published_at,
  updated_at = timezone('utc', now());

update public.scenario_templates
set
  status = 'published',
  current_published_version_id = versions.id,
  current_draft_version_id = null,
  updated_at = timezone('utc', now())
from public.scenario_versions as versions
where scenario_templates.id = versions.template_id
  and versions.version_number = 1
  and scenario_templates.id in (
    '6427d91d-e6c9-4a9f-bcd2-1383ee497ddc',
    'cd0f6f80-0f08-476d-83bf-cbdbe29d0aaa',
    '19594497-2746-484d-b197-ac7c52cb4684',
    '1fe5d948-1f74-475a-ba54-2607fe2c74ee',
    '57940a41-a2bc-4b4b-ab45-cdf1150f6d4a',
    '22c85194-a07b-4afa-92fc-148f52d165a4'
  );

commit;
