<?php
/**
 * Configuration centralisée des 21 niveaux AVI
 *
 * Source de vérité unique : Sprints, Mois, infusionTimer, Actions de brouillon,
 * Matrice sectorielle (9 secteurs × 15 niveaux), Lexique sectoriel.
 * Le thème ne gère que l'affichage (CSS) ; toute la logique est ici.
 *
 * @package Avision_Dashboard
 */

namespace Avision;

if (!defined('ABSPATH')) exit;

class Avision_Levels_Config {

	/** Niveaux exclus de la progression linéaire des Sprints (L4 = Mode Gardien, L5 = Bonus) */
	const EXCLUDED_FROM_SPRINTS = ['level4', 'level5'];

	/** Niveaux exclus des draft missions quand Mode Gardien actif */
	const DRAFT_EXCLUDED_WHEN_GUARDIAN = ['level15', 'level16', 'level18', 'level20'];

	/**
	 * Verrouillage vertical (secteur métier AVI → numéros de niveaux 1–21 désactivés côté UI).
	 * Clés = codes secteur front (detectSectorForLexicon) : FOOD, HOSPITALITY, SERVICE, etc.
	 * HOSPITALITY : vide — L14 (réservations) n’est pas verrouillé ; L18 (posts Google) utilise le verrou dédié hôtel (JS + politique Google), pas le badge vertical.
	 * Filtre : `avision_vertical_locks`.
	 */
	public static function get_vertical_locks() {
		return [
			'HOSPITALITY' => [],
		];
	}

	/** Ordre des sprints pour calcul d'index */
	const SPRINT_KEYS_ORDER = ['sprint1', 'sprint2', 'sprint3', 'sprint4', 'sprint5', 'sprint6', 'sprint7'];

	/** Plan par mois (pour timeline / affichage) */
	public static function get_months_plan() {
		return [
			'month1' => ['label' => 'Mois 1', 'levels' => ['level1', 'level2', 'level3', 'level4', 'level5', 'level6', 'level7', 'level8']],
			'month2' => ['label' => 'Mois 2', 'levels' => ['level9', 'level10', 'level11', 'level12', 'level13', 'level14', 'level15', 'level16', 'level17']],
			'month3' => ['label' => 'Mois 3', 'levels' => ['level18', 'level19', 'level20', 'level21']],
		];
	}

	/** Sprints : 7 Sprints, niveaux regroupés */
	public static function get_sprints_config() {
		return [
			'sprint1' => ['id' => 'sprint1', 'label' => 'Sprint 1', 'levels' => ['level1', 'level2', 'level3']],
			'sprint2' => ['id' => 'sprint2', 'label' => 'Sprint 2', 'levels' => ['level6', 'level7', 'level8']],
			'sprint3' => ['id' => 'sprint3', 'label' => 'Sprint 3', 'levels' => ['level9', 'level10', 'level11']],
			'sprint4' => ['id' => 'sprint4', 'label' => 'Sprint 4', 'levels' => ['level12', 'level13', 'level14']],
			'sprint5' => ['id' => 'sprint5', 'label' => 'Sprint 5', 'levels' => ['level15', 'level16', 'level17']],
			'sprint6' => ['id' => 'sprint6', 'label' => 'Sprint 6', 'levels' => ['level18', 'level19', 'level20']],
			'sprint7' => ['id' => 'sprint7', 'label' => 'Sprint 7', 'levels' => ['level21']],
		];
	}

	/** Barème infusion (heures) par levelId */
	public static function get_infusion_timer_hours() {
		return [
			'level1' => 72,
			'level2' => 72,
			'level3' => 72,
			'level4' => 72,
			'level5' => 12,
			'level6' => 72,
			'level7' => 48,
			'level8' => 48,
			'level9' => 48,
			'level10' => 72,
			'level11' => 48,
			'level12' => 120,
			'level13' => 120,
			'level14' => 120,
			'level15' => 120,
			'level16' => 120,
			'level17' => 120,
			'level18' => 120,
			'level19' => 120,
			'level20' => 168,
			'level21' => 240,
		];
	}

	/** Heures d'infusion pour un levelId (défaut 72) */
	public static function get_infusion_timer_for_level($level_id) {
		$hours = self::get_infusion_timer_hours();
		return isset($hours[$level_id]) ? (int) $hours[$level_id] : 72;
	}

	/** Liste des levelIds dans l'ordre de progression des Sprints */
	public static function get_sprint_level_ids() {
		$ids = [];
		foreach (self::SPRINT_KEYS_ORDER as $key) {
			$config = self::get_sprints_config();
			if (isset($config[$key]['levels'])) {
				foreach ($config[$key]['levels'] as $level_id) {
					$ids[] = $level_id;
				}
			}
		}
		return $ids;
	}

	/** Index du Sprint (1-based) pour un levelId, ou 0 si hors Sprints */
	public static function get_sprint_index_for_level($level_id) {
		if (in_array($level_id, self::EXCLUDED_FROM_SPRINTS, true)) return 0;
		$config = self::get_sprints_config();
		foreach (self::SPRINT_KEYS_ORDER as $i => $key) {
			if (isset($config[$key]['levels']) && in_array($level_id, $config[$key]['levels'], true)) {
				return $i + 1;
			}
		}
		return 0;
	}

	/** Niveaux du Sprint à l'index donné (1-based) */
	public static function get_sprint_levels_by_index($sprint_index) {
		if ($sprint_index < 1 || $sprint_index > count(self::SPRINT_KEYS_ORDER)) return [];
		$key = self::SPRINT_KEYS_ORDER[$sprint_index - 1];
		$config = self::get_sprints_config();
		return isset($config[$key]['levels']) ? $config[$key]['levels'] : [];
	}

	/** Actions de brouillon (Missions de l'Ombre) par niveau — FR uniquement (rétro-compatibilité). */
	public static function get_draft_missions() {
		$i18n = self::get_draft_missions_i18n();
		return $i18n['fr'];
	}

	/** Actions de brouillon i18n (FR / EN / ES). Placeholders : ${target}, ${items}, ${experience}, ${sector} */
	public static function get_draft_missions_i18n() {
		return [
			'fr' => [
				'level1' => 'Révisez vos 3 concurrents directs sur Google Maps et notez quelle catégorie secondaire ils utilisent en plus de la principale.',
				'level2' => 'Listez les 5 questions que vos ${target} vous posent le plus souvent au téléphone pour préparer votre futur contenu.',
				'level3' => 'Préparez un dossier "Séduction" avec 3 photos haute définition : une de votre façade, une de votre équipe, et une de votre meilleur ${items}.',
				'level4' => 'Reste sur ce dashboard : connecte ton compte Google (synchronisation API), attends la pastille verte, puis valide avec le bouton noir.',
				'level5' => 'Prépare l’intégration de la carte Google sur ton site (iframe Partager → Intégrer) ; l’e-mail type pour le webmaster est dans le parcours.',
				'level6' => 'Sélectionnez vos 3 ${items} les plus rentables. Notez leur prix exact et rédigez une description de 2 lignes pour chacun.',
				'level7' => 'Vérifiez que votre numéro de téléphone et votre site web sont écrits EXACTEMENT de la même façon sur votre page Facebook et vos mentions légales.',
				'level8' => 'Anticipez vos 3 prochains jours fériés ou congés annuels et notez les horaires spécifiques que nous devrons injecter.',
				'level9' => 'Identifiez si vous proposez des services spécifiques (Wi-Fi, Parking, Accessibilité) qui pourraient devenir des critères de choix pour vos ${target}.',
				'level10' => 'Ouvrez une carte et listez les 5 quartiers ou villes limitrophes où vous souhaiteriez que votre ${experience} apparaisse en priorité.',
				'level11' => 'Notez les termes "critiques" que vos clients utilisent quand ils ont un besoin immédiat de vos ${items} (ex: dépannage, urgent, disponible).',
				'level12' => 'Faites une recherche sur Maps autour de votre adresse. Repérez les fiches concurrentes qui semblent "fantômes" ou sans local réel.',
				'level13' => 'Rédigez un paragraphe de 300 caractères pour expliquer la valeur unique de votre ${experience} phare.',
				'level14' => 'Vérifiez si votre lien de prise de rendez-vous ou votre formulaire de contact fonctionne parfaitement sur mobile.',
				'level15' => 'Relisez vos derniers avis et listez les 3 arguments que vos ${target} citent le plus pour vous recommander.',
				'level16' => 'Notez les 3 questions que vos ${target} vous posent le plus avant de vous contacter.',
				'level17' => "Notez l'année de création de votre établissement et l'anecdote qui prouve votre expertise historique dans le secteur.",
				'level18' => 'Choisissez le sujet de votre prochain post : une promo, une nouveauté, ou un conseil pour vos ${target}.',
				'level19' => 'Repérez dans votre historique quel jour de la semaine vos ${target} sont les plus actifs. Ce sera notre jour de publication prioritaire.',
				'level20' => 'Sélectionnez 3 nouvelles photos (intérieur, équipe, évolution) à ajouter pour renouveler votre vitrine.',
				'level21' => 'Préparez votre numéro SIRET et vos informations juridiques pour valider rapidement vos inscriptions sur Waze et Apple Maps.',
			],
			'en' => [
				'level1' => 'Review your 3 direct competitors on Google Maps and note which secondary category they use in addition to their primary one.',
				'level2' => 'List the 5 questions your ${target} ask you most often on the phone to prepare your future content.',
				'level3' => 'Prepare a "Showcase" folder with 3 high-definition photos: one of your storefront, one of your team, and one of your best ${items}.',
				'level4' => 'Stay on this dashboard: connect your Google account (API sync), wait for the green badge, then validate with the black button.',
				'level5' => 'Prepare embedding your Google map on your site (Share → Embed iframe); the sample email for your web developer is in the journey.',
				'level6' => 'Select your 3 most profitable ${items}. Note their exact price and write a 2-line description for each.',
				'level7' => 'Verify that your phone number and website are written EXACTLY the same way on your Facebook page and your legal notices.',
				'level8' => 'Plan your next 3 public holidays or annual leave dates and note the specific hours we will need to update.',
				'level9' => 'Identify if you offer specific services (Wi-Fi, Parking, Accessibility) that could become deciding factors for your ${target}.',
				'level10' => 'Open a map and list the 5 neighborhoods or nearby cities where you would like your ${experience} to appear as a priority.',
				'level11' => 'Note the "critical" terms your clients use when they have an urgent need for your ${items} (e.g., emergency, urgent, available now).',
				'level12' => 'Search on Maps around your address. Spot competitor listings that seem "ghost" or without a real location.',
				'level13' => 'Write a 300-character paragraph explaining the unique value of your flagship ${experience}.',
				'level14' => 'Check if your booking link or contact form works perfectly on mobile.',
				'level15' => 'Re-read your latest reviews and list the 3 arguments your ${target} cite most to recommend you.',
				'level16' => 'Note the 3 questions your ${target} ask most before contacting you.',
				'level17' => 'Note the year your business was founded and the story that proves your historical expertise in the industry.',
				'level18' => 'Choose the topic for your next post: a promotion, a new offering, or advice for your ${target}.',
				'level19' => 'Check your history to find which day of the week your ${target} are most active. That will be our priority publishing day.',
				'level20' => 'Select 3 new photos (interior, team, updates) to add to refresh your showcase.',
				'level21' => 'Prepare your business registration number and legal information to quickly validate your listings on Waze and Apple Maps.',
			],
			'es' => [
				'level1' => 'Revisa a tus 3 competidores directos en Google Maps y anota qué categoría secundaria utilizan además de la principal.',
				'level2' => 'Enumera las 5 preguntas que tus ${target} te hacen con más frecuencia por teléfono para preparar tu contenido futuro.',
				'level3' => 'Prepara una carpeta "Escaparate" con 3 fotos en alta definición: una de tu fachada, una de tu equipo y una de tu mejor ${items}.',
				'level4' => 'Permanece en este panel: conecta tu cuenta Google (sincronización API), espera la insignia verde y valida con el botón negro.',
				'level5' => 'Prepara integrar tu mapa de Google en tu sitio (Compartir → iframe); el correo modelo para tu webmaster está en el recorrido.',
				'level6' => 'Selecciona tus 3 ${items} más rentables. Anota su precio exacto y redacta una descripción de 2 líneas para cada uno.',
				'level7' => 'Verifica que tu número de teléfono y tu sitio web estén escritos EXACTAMENTE igual en tu página de Facebook y en tus avisos legales.',
				'level8' => 'Anticipa tus próximos 3 días festivos o vacaciones anuales y anota los horarios específicos que necesitaremos actualizar.',
				'level9' => 'Identifica si ofreces servicios específicos (Wi-Fi, Parking, Accesibilidad) que podrían ser criterios de decisión para tus ${target}.',
				'level10' => 'Abre un mapa y enumera los 5 barrios o ciudades cercanas donde te gustaría que tu ${experience} aparezca como prioridad.',
				'level11' => 'Anota los términos "críticos" que tus clientes usan cuando tienen una necesidad urgente de tus ${items} (ej: emergencia, urgente, disponible).',
				'level12' => 'Busca en Maps alrededor de tu dirección. Identifica fichas de competidores que parezcan "fantasma" o sin local real.',
				'level13' => 'Redacta un párrafo de 300 caracteres explicando el valor único de tu ${experience} estrella.',
				'level14' => 'Verifica si tu enlace de reserva o formulario de contacto funciona perfectamente en móvil.',
				'level15' => 'Relee tus últimas reseñas y enumera los 3 argumentos que tus ${target} citan más para recomendarte.',
				'level16' => 'Anota las 3 preguntas que tus ${target} te hacen más antes de contactarte.',
				'level17' => 'Anota el año de creación de tu establecimiento y la anécdota que demuestra tu experiencia histórica en el sector.',
				'level18' => 'Elige el tema de tu próxima publicación: una promoción, una novedad o un consejo para tus ${target}.',
				'level19' => 'Revisa tu historial para encontrar qué día de la semana tus ${target} son más activos. Ese será nuestro día de publicación prioritario.',
				'level20' => 'Selecciona 3 fotos nuevas (interior, equipo, novedades) para renovar tu escaparate.',
				'level21' => 'Prepara tu número de registro empresarial e información legal para validar rápidamente tus inscripciones en Waze y Apple Maps.',
			],
		];
	}

	/**
	 * Config complète pour le front (JS) — même structure que l'ancien levelsData.js
	 * Utilisé par wp_localize_script pour exposer AvisionLevelsData.
	 */
	public static function get_js_config() {
		$sprints_config = self::get_sprints_config();
		$i18n = self::get_draft_missions_i18n();
		return [
			'sprintsConfig' => $sprints_config,
			'monthsPlan' => self::get_months_plan(),
			'infusionTimerHours' => self::get_infusion_timer_hours(),
			'EXCLUDED_FROM_SPRINTS' => self::EXCLUDED_FROM_SPRINTS,
			'draftMissions' => $i18n['fr'],
			'draftMissionsI18n' => $i18n,
			'DRAFT_EXCLUDED_WHEN_GUARDIAN' => self::DRAFT_EXCLUDED_WHEN_GUARDIAN,
			'sprintKeysOrder' => self::SPRINT_KEYS_ORDER,
			'sprintLevelIds' => self::get_sprint_level_ids(),
			'verticalLocks' => apply_filters( 'avision_vertical_locks', self::get_vertical_locks() ),
		];
	}

	/**
	 * Matrice des 9 secteurs × 15 niveaux (libellés métier par secteur)
	 */
	public static function get_levels_matrix() {
		return [
			'FOOD' => [
				1 => 'Catégories & Spécialités Culinaires',
				2 => 'Sémantique Menu & Mots-clés Locaux',
				3 => 'Photos & Vitrine Visuelle (Menu & Plats)',
				4 => 'Mode Gardien (Avis Gastronomes)',
				5 => 'BONUS : Widget Menu Digital & Réservation (Maps)',
				6 => 'Rayon de Livraison & Visibilité GPS',
				7 => 'Services de Click & Collect',
				8 => 'Gestion des Horaires',
				9 => 'Autorité Locale (Guides & Blogs)',
				10 => 'FAQ Technique (Commandes & Support)',
				11 => 'Posts & Actualités (Plats du jour & Évènements)',
				12 => 'Expansion Multi-Plateformes',
				13 => 'Automatisation IA - Récurrent',
				14 => 'Domination & Local Ads - Récurrent',
				15 => 'Annuaires Locaux - Récurrent',
			],
			'HEALTH' => [
				1 => 'Spécialités Médicales & Nomenclature',
				2 => 'Description Expert & Mots-clés Confiance Patient',
				3 => 'Photos & Vitrine Visuelle (Espace & Équipe)',
				4 => 'Mode Gardien (Éthique & Réputation)',
				5 => 'BONUS : Intégration Doctolib & Prise de RDV (Maps)',
				6 => 'Accessibilité & Zone de Patientèle',
				7 => 'Services d\'Urgence & Téléconsultation',
				8 => 'Modération des Retours Patients',
				9 => 'Autorité Scientifique Locale',
				10 => 'FAQ Technique (Honoraires & Accès)',
				11 => 'Posts & Actualités (Prévention & Actualités du cabinet)',
				12 => 'Expansion Multi-Plateformes',
				13 => 'Automatisation IA - Récurrent',
				14 => 'Domination & Local Ads - Récurrent',
				15 => 'Annuaires Locaux - Récurrent',
			],
			'SERVICE' => [
				1 => 'Services Principaux & Urgences',
				2 => 'Description Interventions & Mots-clés Locaux',
				3 => 'Photos & Vitrine Visuelle (Chantiers & Réalisations)',
				4 => 'Mode Gardien (Preuves Sociales)',
				5 => 'BONUS : Widget Devis Express (Maps)',
				6 => 'Zone de Chalandise & Rayon GPS',
				7 => 'Disponibilité 24/7 & Interventions',
				8 => 'Nettoyage des Faux Avis (Spam Shield)',
				9 => 'Réputation Blindée (Labels & Certifs)',
				10 => 'FAQ Technique (Délais & Tarifs)',
				11 => 'Posts & Actualités (Chantier de la semaine & Conseil d\'entretien)',
				12 => 'Expansion Multi-Plateformes',
				13 => 'Automatisation IA - Récurrent',
				14 => 'Domination & Local Ads - Récurrent',
				15 => 'Annuaires Locaux - Récurrent',
			],
			'AUTO' => [
				1 => 'Expertise Technique & Marques',
				2 => 'Description Atelier & Mots-clés Expertise',
				3 => 'Photos & Vitrine Visuelle (Atelier & Véhicules)',
				4 => 'Mode Gardien (Confiance Client)',
				5 => 'BONUS : Prise de RDV Atelier Online (Maps)',
				6 => 'Ciblage Géographique Conducteurs',
				7 => 'Dépannage & Services Rapides',
				8 => 'Protection Contre le Spam Local',
				9 => 'Notoriété & Réseaux Constructeurs',
				10 => 'FAQ Technique (Prestations & Devis)',
				11 => 'Posts & Actualités (Offres promotionnelles saisonnières)',
				12 => 'Expansion Multi-Plateformes',
				13 => 'Automatisation IA - Récurrent',
				14 => 'Domination & Local Ads - Récurrent',
				15 => 'Annuaires Locaux - Récurrent',
			],
			'BEAUTY' => [
				1 => 'Carte des Soins & Styles',
				2 => 'Description Soins & Mots-clés Esthétique',
				3 => 'Photos & Vitrine Visuelle (Soins & Salon)',
				4 => 'Mode Gardien (Ambassadeurs)',
				5 => 'BONUS : Widget Réservation Beauté (Maps)',
				6 => 'Attractivité de Quartier & Mots-clés',
				7 => 'Offres Flash & Évènements',
				8 => 'Modération des Expériences Clients',
				9 => 'Autorité Style & Influence Locale',
				10 => 'FAQ Technique (Produits & Rdv)',
				11 => 'Posts & Actualités (Nouveau soin & Créneaux dernière minute)',
				12 => 'Expansion Multi-Plateformes',
				13 => 'Automatisation IA - Récurrent',
				14 => 'Domination & Local Ads - Récurrent',
				15 => 'Annuaires Locaux - Récurrent',
			],
			'RETAIL' => [
				1 => 'Rayonnages & Univers Produits',
				2 => 'Description Produits & Mots-clés Vitrine',
				3 => 'Photos & Vitrine Visuelle (Produits & Vitrine)',
				4 => 'Mode Gardien (Fidélité)',
				5 => 'BONUS : Catalogue Produits Local Inventory (Maps)',
				6 => 'Flux de Passage & Drive-to-Store',
				7 => 'Horaires de Flux & Click&Collect',
				8 => 'Sécurité Image de Marque',
				9 => 'Partenariats Locaux & Notoriété',
				10 => 'FAQ Technique (Stocks & Retours)',
				11 => 'Posts & Actualités (Arrivage & Ventes flash)',
				12 => 'Expansion Multi-Plateformes',
				13 => 'Automatisation IA - Récurrent',
				14 => 'Domination & Local Ads - Récurrent',
				15 => 'Annuaires Locaux - Récurrent',
			],
			'PROF_SERV' => [
				1 => 'Domaines d\'Expertise & Juridique',
				2 => 'Description Expertise & Mots-clés Juridique',
				3 => 'Photos & Vitrine Visuelle (Équipe & Bureau)',
				4 => 'Mode Gardien (Crédibilité)',
				5 => 'BONUS : Consultation Initiale Digitale (Maps)',
				6 => 'Ciblage Décideurs Locaux',
				7 => 'Services Spécifiques & Honoraires',
				8 => 'Nettoyage E-réputation',
				9 => 'Autorité de Place (Publications)',
				10 => 'FAQ Technique (Parcours Client)',
				11 => 'Posts & Actualités (Étude de cas & Veille métier)',
				12 => 'Expansion Multi-Plateformes',
				13 => 'Automatisation IA - Récurrent',
				14 => 'Domination & Local Ads - Récurrent',
				15 => 'Annuaires Locaux - Récurrent',
			],
			'HOSPITALITY' => [
				1 => 'Types d\'Hébergement & Standing',
				2 => 'Description Hébergement & Mots-clés Équipements',
				3 => 'Photos & Vitrine Visuelle (Chambres & Équipements)',
				4 => 'Mode Gardien (Séjours)',
				5 => 'BONUS : Moteur de Réservation Direct (Maps)',
				6 => 'Tourisme Local & Points d\'Intérêt',
				7 => 'Services Saisonniers & Suppléments',
				8 => 'Modération Avis Voyageurs',
				9 => 'Labels Qualité & Récompenses',
				10 => 'FAQ Technique (Check-in/Out)',
				11 => 'Posts & Actualités (Offres week-end & Actualités touristiques locales)',
				12 => 'Expansion Multi-Plateformes',
				13 => 'Automatisation IA - Récurrent',
				14 => 'Domination & Local Ads - Récurrent',
				15 => 'Annuaires Locaux - Récurrent',
			],
			'FITNESS' => [
				1 => 'Disciplines & Équipements',
				2 => 'Description Club & Mots-clés Coaching',
				3 => 'Photos & Vitrine Visuelle (Club & Équipements)',
				4 => 'Mode Gardien (Communauté)',
				5 => 'BONUS : Pass Découverte & Inscription (Maps)',
				6 => 'Rayon d\'Action & Proximité',
				7 => 'Planning des Cours & Coaching',
				8 => 'Gestion des Retours Adhérents',
				9 => 'Notoriété Santé & Sport',
				10 => 'FAQ Technique (Abonnements)',
				11 => 'Posts & Actualités (Planning des cours & Succès d\'un adhérent)',
				12 => 'Expansion Multi-Plateformes',
				13 => 'Automatisation IA - Récurrent',
				14 => 'Domination & Local Ads - Récurrent',
				15 => 'Annuaires Locaux - Récurrent',
			],
		];
	}

	/**
	 * Lexique sectoriel (placeholders pour prompts chat)
	 */
	public static function get_sector_lexicon() {
		return [
			'FOOD' => [
				'termMetierL1' => 'Pizzeria, Sushi, etc.',
				'termContenuL2' => 'Menu, Saveurs, Carte',
				'termVisuelL3' => 'Plats, Salle, Cuisine',
				'termClientL9' => 'Gourmets, Clients',
				'termActuL11' => 'Plats du jour & évènements de la semaine',
				'termGeoL12' => 'Clients affamés',
				'termClientL13' => 'Gourmets',
				'termPubL14' => 'Vos plats phares',
				'termAnnuaireL15' => 'Guides gastronomiques',
			],
			'HEALTH' => [
				'termMetierL1' => 'Dentiste, Kiné, etc.',
				'termContenuL2' => 'Spécialités, Soins',
				'termVisuelL3' => 'Cabinet, Diplômes',
				'termClientL9' => 'Patients',
				'termActuL11' => 'Conseils de prévention & actualités du cabinet',
				'termGeoL12' => 'Patients',
				'termClientL13' => 'Patients',
				'termPubL14' => 'Votre expertise',
				'termAnnuaireL15' => 'Annuaires médicaux',
			],
			'SERVICE' => [
				'termMetierL1' => 'Plombier, Agence, etc.',
				'termContenuL2' => 'Interventions, Devis',
				'termVisuelL3' => 'Chantiers, Équipe',
				'termClientL9' => 'Clients locaux',
				'termActuL11' => 'Chantier de la semaine & conseil d\'entretien',
				'termGeoL12' => 'Clients locaux',
				'termClientL13' => 'Clients',
				'termPubL14' => 'Vos interventions',
				'termAnnuaireL15' => 'Annuaires BTP/Pro',
			],
			'AUTO' => [
				'termMetierL1' => 'Garage, Carrosserie',
				'termContenuL2' => 'Prestations, Réparations',
				'termVisuelL3' => 'Atelier, Véhicules',
				'termClientL9' => 'Conducteurs',
				'termActuL11' => 'Offres promotionnelles saisonnières (pneus, révision)',
				'termGeoL12' => 'Conducteurs',
				'termClientL13' => 'Conducteurs',
				'termPubL14' => 'Vos réparations',
				'termAnnuaireL15' => 'Annuaires automobile',
			],
			'BEAUTY' => [
				'termMetierL1' => 'Coiffeur, Spa, etc.',
				'termContenuL2' => 'Soins, Styles, Tarifs',
				'termVisuelL3' => 'Avant/Après, Salon',
				'termClientL9' => 'Clientèle',
				'termActuL11' => 'Nouveau soin & créneaux de dernière minute',
				'termGeoL12' => 'Clientèle locale',
				'termClientL13' => 'Clientèle',
				'termPubL14' => 'Vos soins & styles',
				'termAnnuaireL15' => 'Portails beauté',
			],
			'RETAIL' => [
				'termMetierL1' => 'Boutique, Magasin',
				'termContenuL2' => 'Rayonnages, Stocks',
				'termVisuelL3' => 'Vitrine, Produits',
				'termClientL9' => 'Acheteurs',
				'termActuL11' => 'Arrivage de nouveaux produits & ventes flash',
				'termGeoL12' => 'Acheteurs',
				'termClientL13' => 'Acheteurs',
				'termPubL14' => 'Vos produits',
				'termAnnuaireL15' => 'Annuaires commerçants',
			],
			'PROF_SERV' => [
				'termMetierL1' => 'Avocat, Notaire, etc.',
				'termContenuL2' => 'Expertises, Conseils',
				'termVisuelL3' => 'Bureau, Études de cas',
				'termClientL9' => 'Mandants, Clients',
				'termActuL11' => 'Partage d\'expertise (étude de cas / veille)',
				'termGeoL12' => 'Prospects',
				'termClientL13' => 'Mandants',
				'termPubL14' => 'Vos conseils',
				'termAnnuaireL15' => 'Annuaires spécialisés',
			],
			'HOSPITALITY' => [
				'termMetierL1' => 'Hôtel, Gîte, etc.',
				'termContenuL2' => 'Séjours, Ambiance',
				'termVisuelL3' => 'Chambres, Équipements',
				'termClientL9' => 'Voyageurs, Hôtes',
				'termActuL11' => 'Actualités touristiques locales & offres week-end',
				'termGeoL12' => 'Voyageurs',
				'termClientL13' => 'Voyageurs',
				'termPubL14' => 'Votre établissement',
				'termAnnuaireL15' => 'Guides touristiques',
			],
			'FITNESS' => [
				'termMetierL1' => 'Salle de sport, Coach',
				'termContenuL2' => 'Disciplines, Planning',
				'termVisuelL3' => 'Infrastructure, Cours',
				'termClientL9' => 'Adhérents',
				'termActuL11' => 'Planning des cours & succès d\'un adhérent',
				'termGeoL12' => 'Sportifs',
				'termClientL13' => 'Adhérents',
				'termPubL14' => 'Votre club',
				'termAnnuaireL15' => 'Portails sport & santé',
			],
		];
	}

	/**
	 * Liste formatée des niveaux pour un secteur (pour injection dans prompts chat)
	 * L5 porte la mention "(BONUS)".
	 */
	public static function get_all_levels_list_for_sector($sector) {
		$matrix = self::get_levels_matrix();
		if (!isset($matrix[$sector]) || !is_array($matrix[$sector])) return '';
		$lines = [];
		ksort($matrix[$sector]);
		foreach ($matrix[$sector] as $lvl => $name) {
			$lvl = (int) $lvl;
			if (!is_string($name)) continue;
			$label = trim($name);
			if ($lvl === 5 && stripos($label, '(BONUS)') === false) {
				$label = preg_replace('/^\s*BONUS\s*:\s*/i', '', $label);
				$label = trim($label) . ' (BONUS)';
			}
			$lines[] = 'L' . $lvl . ': ' . $label;
		}
		return implode("\n", $lines);
	}
}
