<?php
namespace Avision;

/**
 * Générateur de réponses intelligentes pour le Mode Gardien
 * 
 * Génère des réponses personnalisées et optimisées SEO
 * selon le contexte, le nombre d'étoiles et le ton requis.
 * 
 * Utilise une température de 0.7 pour varier les formulations
 * et éviter les réponses identiques détectées par Google.
 */
class Guardian_Response_Generator {
    
    /**
     * Templates de réponses par nombre d'étoiles et langue
     */
    private $templates = [];
    
    /**
     * Templates pour avis sans texte (étoiles uniquement)
     */
    private $no_text_templates = [];
    
    /**
     * Variations de formulations pour la "température"
     */
    private $variations = [];
    
    /**
     * Niveau de variation (0.0 = identique, 1.0 = très varié)
     * Recommandé: 0.7 pour éviter détection Google
     */
    private $temperature = 0.7;
    
    public function __construct() {
        $this->init_templates();
        $this->init_no_text_templates();
        $this->init_variations();
    }
    
    /**
     * Initialise les templates de réponses
     */
    private function init_templates() {
        // Templates 5 étoiles - Ton: Grateful
        $this->templates[5] = [
            'fr' => [
                'Merci infiniment {$reviewer_name} pour cet avis 5 étoiles ! 🌟\n\nRavi que {$context_positive}. Votre satisfaction est notre priorité chez {$company} à {$city}.\n\n{$context_specific}\n\nAu plaisir de vous revoir bientôt !\n\nL\'équipe {$company}',

                'Quelle joie de lire votre retour {$reviewer_name} ! ⭐⭐⭐⭐⭐\n\n{$context_positive} - c\'est exactement ce que nous visons chez {$company}. Merci de nous faire confiance à {$city}.\n\n{$context_specific}\n\nÀ très bientôt,\n{$company}',

                'Un immense merci {$reviewer_name} pour ces 5 étoiles ! 🙏\n\nVotre retour sur {$context_mention} nous touche énormément. Toute l\'équipe de {$company} à {$city} travaille chaque jour pour offrir cette qualité.\n\n{$context_specific}\n\nCordialement,\n{$company}'
            ],
            'en' => [
                'Thank you so much {$reviewer_name} for this 5-star review! 🌟\n\nWe\'re thrilled that {$context_positive}. Your satisfaction is our priority at {$company} in {$city}.\n\n{$context_specific}\n\nLooking forward to seeing you again!\n\nThe {$company} Team',

                'What a joy to read your feedback {$reviewer_name}! ⭐⭐⭐⭐⭐\n\n{$context_positive} - that\'s exactly what we aim for at {$company}. Thank you for trusting us in {$city}.\n\n{$context_specific}\n\nSee you soon,\n{$company}',

                'A huge thank you {$reviewer_name} for these 5 stars! 🙏\n\nYour feedback about {$context_mention} means so much to us. The entire {$company} team in {$city} works every day to deliver this quality.\n\n{$context_specific}\n\nBest regards,\n{$company}'
            ]
        ];

        // Templates 4 étoiles - Ton: Grateful + Constructive
        $this->templates[4] = [
            'fr' => [
                'Merci beaucoup {$reviewer_name} pour cet excellent retour ! ⭐⭐⭐⭐\n\nNous sommes heureux que {$context_positive}. Chez {$company} à {$city}, nous cherchons constamment à nous améliorer.\n\n{$context_improvement}\n\nN\'hésitez pas à nous contacter pour toute suggestion.\n\nCordialement,\n{$company}',

                'Merci {$reviewer_name} pour ces 4 étoiles ! 🌟\n\n{$context_positive} - votre satisfaction nous motive. Nous prenons note de vos remarques pour atteindre l\'excellence chez {$company} à {$city}.\n\n{$context_specific}\n\nÀ bientôt,\nL\'équipe {$company}',

                'Un grand merci {$reviewer_name} ! ⭐⭐⭐⭐\n\nRavis que {$context_positive}. Votre retour nous aide à progresser chez {$company} à {$city}.\n\n{$context_improvement}\n\nMerci de votre confiance,\n{$company}'
            ],
            'en' => [
                'Thank you very much {$reviewer_name} for this excellent feedback! ⭐⭐⭐⭐\n\nWe\'re happy that {$context_positive}. At {$company} in {$city}, we\'re constantly striving to improve.\n\n{$context_improvement}\n\nFeel free to contact us with any suggestions.\n\nBest regards,\n{$company}',

                'Thank you {$reviewer_name} for these 4 stars! 🌟\n\n{$context_positive} - your satisfaction motivates us. We\'re taking note of your comments to achieve excellence at {$company} in {$city}.\n\n{$context_specific}\n\nSee you soon,\nThe {$company} Team',

                'A big thank you {$reviewer_name}! ⭐⭐⭐⭐\n\nGlad that {$context_positive}. Your feedback helps us improve at {$company} in {$city}.\n\n{$context_improvement}\n\nThank you for your trust,\n{$company}'
            ]
        ];

        // Templates 3 étoiles - Ton: Constructive
        $this->templates[3] = [
            'fr' => [
                'Merci {$reviewer_name} pour votre retour constructif. ⭐⭐⭐\n\nNous prenons très au sérieux vos remarques concernant {$context_mention}. Chez {$company} à {$city}, nous visons l\'excellence et votre avis nous aide à progresser.\n\n{$context_improvement}\n\nNous aurions plaisir à échanger avec vous pour mieux comprendre votre expérience.\n\nCordialement,\n{$company}',

                'Ravi de votre retour {$reviewer_name},\n\nMerci d\'avoir pris le temps de partager votre expérience. Nous sommes désolés que {$context_negative}.\n\nChez {$company} à {$city}, nous travaillons activement à améliorer {$context_mention}.\n\n{$context_specific}\n\nN\'hésitez pas à nous recontacter.\n\nL\'équipe {$company}',

                'Merci {$reviewer_name} pour cet avis. ⭐⭐⭐\n\n{$context_improvement}\n\nVotre satisfaction est importante pour {$company} à {$city}. Nous mettons tout en œuvre pour améliorer nos services.\n\nContactez-nous pour en discuter.\n\nCordialement,\n{$company}'
            ],
            'en' => [
                'Thank you {$reviewer_name} for your constructive feedback. ⭐⭐⭐\n\nWe take your comments about {$context_mention} very seriously. At {$company} in {$city}, we aim for excellence and your review helps us improve.\n\n{$context_improvement}\n\nWe\'d love to discuss your experience further.\n\nBest regards,\n{$company}',

                'Hello {$reviewer_name},\n\nThank you for taking the time to share your experience. We\'re sorry that {$context_negative}.\n\nAt {$company} in {$city}, we\'re actively working to improve {$context_mention}.\n\n{$context_specific}\n\nFeel free to contact us again.\n\nThe {$company} Team',

                'Thank you {$reviewer_name} for this review. ⭐⭐⭐\n\n{$context_improvement}\n\nYour satisfaction matters to {$company} in {$city}. We\'re doing everything to improve our services.\n\nContact us to discuss further.\n\nBest regards,\n{$company}'
            ]
        ];

        // Templates 1-2 étoiles - Ton: Empathetic + Resolution
        $this->templates[2] = [
            'fr' => [
                'Ravi de votre retour {$reviewer_name},\n\nNous sommes sincèrement désolés de votre expérience décevante. 😔\n\nVotre retour concernant {$context_mention} nous préoccupe beaucoup. Chez {$company} à {$city}, ce n\'est pas le niveau de service que nous souhaitons offrir.\n\n{$context_resolution}\n\nNous aimerions rectifier la situation. Pourriez-vous nous contacter directement ? Nous ferons tout notre possible pour regagner votre confiance.\n\nCordialement,\nLa Direction de {$company}',

                'Ravi de votre retour {$reviewer_name},\n\nMerci d\'avoir partagé votre expérience, même si elle n\'a pas été à la hauteur de vos attentes.\n\n{$context_negative} - nous en sommes vraiment désolés. Ce n\'est pas acceptable pour {$company} à {$city}.\n\n{$context_resolution}\n\nContactez-nous en privé pour que nous puissions arranger cela.\n\nToutes nos excuses,\n{$company}',

                'Cher(e) {$reviewer_name},\n\nNous sommes profondément désolés. Votre expérience avec {$context_mention} ne reflète pas nos standards chez {$company} à {$city}.\n\n{$context_resolution}\n\nNous voulons corriger cette situation. Merci de nous contacter directement.\n\nSincèrement,\n{$company}'
            ],
            'en' => [
                'Hello {$reviewer_name},\n\nWe\'re sincerely sorry about your disappointing experience. 😔\n\nYour feedback about {$context_mention} concerns us greatly. At {$company} in {$city}, this isn\'t the level of service we want to provide.\n\n{$context_resolution}\n\nWe\'d like to make this right. Could you contact us directly? We\'ll do everything possible to regain your trust.\n\nBest regards,\nThe Management of {$company}',

                'Hello {$reviewer_name},\n\nThank you for sharing your experience, even though it didn\'t meet your expectations.\n\n{$context_negative} - we\'re truly sorry. This isn\'t acceptable for {$company} in {$city}.\n\n{$context_resolution}\n\nContact us privately so we can fix this.\n\nOur sincere apologies,\n{$company}',

                'Dear {$reviewer_name},\n\nWe\'re deeply sorry. Your experience with {$context_mention} doesn\'t reflect our standards at {$company} in {$city}.\n\n{$context_resolution}\n\nWe want to correct this situation. Please contact us directly.\n\nSincerely,\n{$company}'
            ]
        ];

        $this->templates[1] = $this->templates[2]; // Même approche pour 1 et 2 étoiles
    }
    
    /**
     * Initialise les templates pour avis sans texte (étoiles uniquement)
     * Cas spécifique : réponse élégante et concise
     */
    private function init_no_text_templates() {
        $this->no_text_templates = [
            5 => [
                'fr' => [
                    'Merci pour votre confiance et pour cette excellente note ! Au plaisir de vous revoir chez {$company} à {$city}. ⭐⭐⭐⭐⭐',
                    'Un grand merci pour ces 5 étoiles ! Votre satisfaction est notre plus belle récompense. À très bientôt chez {$company} à {$city} ! 🌟',
                    'Merci infiniment pour cette note parfaite ! L\'équipe {$company} à {$city} vous attend avec plaisir pour une prochaine visite. ✨',
                    '🌟 Ravi de vous voir ici ! Découvrez {$company} à {$city}. Merci de faire confiance. 🙏',
                    '5 étoiles, quel honneur ! Merci pour votre confiance. Toute l\'équipe de {$company} à {$city} vous remercie chaleureusement.',
                    'Merci pour cette superbe évaluation ! Nous espérons vous revoir très bientôt chez {$company} à {$city}. 💫'
                ],
                'en' => [
                    'Thank you for your trust and this excellent rating! Looking forward to seeing you again at {$company} in {$city}. ⭐⭐⭐⭐⭐',
                    'A big thank you for these 5 stars! Your satisfaction is our greatest reward. See you soon at {$company} in {$city}! 🌟',
                    'Thank you so much for this perfect rating! The {$company} team in {$city} looks forward to your next visit. ✨',
                    'We\'re thrilled with this excellent rating! Thank you for trusting {$company} in {$city}. 🙏',
                    '5 stars, what an honor! Thank you for your trust. The entire {$company} team in {$city} warmly thanks you.',
                    'Thank you for this wonderful review! We hope to see you again soon at {$company} in {$city}. 💫'
                ]
            ],
            4 => [
                'fr' => [
                    'Merci pour ces 4 étoiles ! Nous espérons vous revoir chez {$company} à {$city} pour mériter vos 5 étoiles. ⭐⭐⭐⭐',
                    'Un grand merci pour cette belle note ! L\'équipe {$company} à {$city} travaille chaque jour pour atteindre l\'excellence.',
                    'Ravi de vous voir ici ! Découvrez {$company} à {$city}. Merci de votre confiance !',
                    '4 étoiles, merci ! Votre satisfaction nous motive. À bientôt chez {$company} à {$city}. 🌟'
                ],
                'en' => [
                    'Thank you for these 4 stars! We hope to see you again at {$company} in {$city} to earn your 5 stars. ⭐⭐⭐⭐',
                    'A big thank you for this great rating! The {$company} team in {$city} works every day to achieve excellence.',
                    'Great to have you here! Discover {$company} in {$city}. Thank you for your trust.',
                    '4 stars, thank you! Your satisfaction motivates us. See you soon at {$company} in {$city}. 🌟'
                ]
            ],
            3 => [
                'fr' => [
                    'Merci pour votre évaluation. N\'hésitez pas à nous contacter pour nous aider à nous améliorer chez {$company} à {$city}.',
                    'Merci pour ces 3 étoiles. Votre avis compte pour nous ! Contactez-nous pour en discuter. {$company} - {$city}',
                    'Nous prenons note de cette évaluation. L\'équipe {$company} à {$city} reste à votre disposition pour échanger.'
                ],
                'en' => [
                    'Thank you for your review. Feel free to contact us to help us improve at {$company} in {$city}.',
                    'Thank you for these 3 stars. Your opinion matters to us! Contact us to discuss. {$company} - {$city}',
                    'We take note of this review. The {$company} team in {$city} is available to discuss further.'
                ]
            ],
            2 => [
                'fr' => [
                    'Nous sommes désolés que votre expérience n\'ait pas été optimale. Contactez-nous pour en discuter. {$company} - {$city}',
                    'Merci pour ce retour. Nous aimerions comprendre ce qui s\'est passé. Contactez-nous chez {$company} à {$city}.',
                    'Votre satisfaction est importante pour nous. Merci de nous contacter pour que nous puissions arranger cela. {$company}'
                ],
                'en' => [
                    'We\'re sorry your experience wasn\'t optimal. Contact us to discuss. {$company} - {$city}',
                    'Thank you for this feedback. We\'d like to understand what happened. Contact us at {$company} in {$city}.',
                    'Your satisfaction matters to us. Please contact us so we can make things right. {$company}'
                ]
            ],
            1 => [
                'fr' => [
                    'Nous sommes vraiment désolés. Merci de nous contacter en privé pour que nous puissions comprendre et arranger la situation. {$company} - {$city}',
                    'Votre retour nous préoccupe. L\'équipe {$company} à {$city} souhaite vous contacter pour rectifier cela.',
                    'Nous regrettons cette expérience. Contactez-nous directement pour que nous puissions faire le nécessaire. {$company}'
                ],
                'en' => [
                    'We\'re truly sorry. Please contact us privately so we can understand and fix the situation. {$company} - {$city}',
                    'Your feedback concerns us. The {$company} team in {$city} would like to contact you to rectify this.',
                    'We regret this experience. Contact us directly so we can do what\'s needed. {$company}'
                ]
            ]
        ];
    }
    
    /**
     * Initialise les variations pour la "température" (0.7)
     * Ces variations sont appliquées aléatoirement pour diversifier les réponses
     */
    private function init_variations() {
        $this->variations = [
            'greetings' => [
                'fr' => ['Ravi de vous voir', 'Cher(e)', 'Cher client', 'Chère cliente', 'Hello'],
                'en' => ['Hello', 'Dear', 'Dear customer', 'Hi', 'Greetings']
            ],
            'thanks' => [
                'fr' => ['Merci', 'Un grand merci', 'Merci infiniment', 'Merci beaucoup', 'Mille mercis', 'Nous vous remercions'],
                'en' => ['Thank you', 'A big thank you', 'Thank you so much', 'Thanks a lot', 'Many thanks', 'We thank you']
            ],
            'positive_adjectives' => [
                'fr' => ['excellent', 'formidable', 'fantastique', 'superbe', 'merveilleux', 'magnifique'],
                'en' => ['excellent', 'wonderful', 'fantastic', 'superb', 'marvelous', 'amazing']
            ],
            'closings' => [
                'fr' => ['Cordialement', 'Bien à vous', 'À très bientôt', 'Au plaisir', 'Avec nos meilleures salutations'],
                'en' => ['Best regards', 'Sincerely', 'See you soon', 'With pleasure', 'With best wishes']
            ],
            'team_names' => [
                'fr' => ["L'équipe", "Toute l'équipe", "L'équipe de", "Le staff de", "Les équipes de"],
                'en' => ["The team", "The entire team", "The team at", "The staff at", "All the team at"]
            ],
            'emojis_positive' => ['🌟', '⭐', '✨', '💫', '🙏', '😊', '👍', '💪'],
            'emojis_empathetic' => ['😔', '🙏', '💬', '📞', '✉️'],
            'time_expressions' => [
                'fr' => ['Au plaisir de vous revoir', 'À très bientôt', 'À la prochaine', 'Dans l\'attente de vous revoir'],
                'en' => ['Looking forward to seeing you', 'See you soon', 'Until next time', 'Hope to see you again']
            ]
        ];
    }
    
    /**
     * Génère une réponse avec justification tactique (pour le Mode Validation)
     * CONSIGNE DE VALIDATION : AVI justifie ses choix comme un "second de cuisine" face au Chef.
     * 
     * @param array $params Paramètres de génération (inclut for_validation, sector, city, company)
     * @return array ['response' => string, 'justification' => string]
     */
    public function generateWithJustification($params) {
        $response = $this->generate($params);
        
        if (empty($params['for_validation'])) {
            return $response;
        }
        
        $city = $params['city'] ?? '';
        $sector = $params['sector'] ?? $params['company'] ?? '';
        $language = $params['language'] ?? 'fr';
        $stars = $params['stars'] ?? 5;
        
        $justifications = [
            'fr' => [
                "J'ai inclus le mot-clé '{$sector} à {$city}' pour booster ton référencement local sur cette réponse.",
                "Proposition optimisée SEO : mention de {$city} et de ton secteur pour renforcer ta visibilité Google.",
                "J'ai adapté le ton pour un avis {$stars}⭐ tout en plaçant naturellement {$city} pour le référencement local.",
                "Formulation calibrée pour Google : {$sector} + {$city} = signal géographique renforcé pour l'algorithme."
            ],
            'en' => [
                "I've included the keyword '{$sector} in {$city}' to boost your local SEO on this response.",
                "SEO-optimized proposal: mention of {$city} and your sector to strengthen your Google visibility.",
                "I've adapted the tone for a {$stars}⭐ review while naturally placing {$city} for local SEO.",
                "Google-calibrated wording: {$sector} + {$city} = stronger geographic signal for the algorithm."
            ]
        ];
        
        $lang = in_array($language, ['fr', 'en']) ? $language : 'fr';
        $justification = $justifications[$lang][array_rand($justifications[$lang])];
        
        return [
            'response' => $response,
            'justification' => $justification
        ];
    }
    
    /**
     * Génère une réponse personnalisée avec variation (température 0.7)
     * 
     * @param array $params Paramètres de génération
     * @return string Réponse générée
     */
    public function generate($params) {
        $stars = $params['stars'];
        $language = $params['language'] ?? 'fr';
        $context = $params['context'] ?? [];
        
        // Cas spécifique : Avis sans texte (étoiles uniquement)
        if (!empty($context['is_empty']) || empty($params['review_text'])) {
            return $this->generate_no_text_response($stars, $language, $params);
        }
        
        // Sélection du protocole selon les étoiles
        if ($stars >= 4) {
            // PROTOCOLE AMBASSADEUR : Remerciement + {$city} + mention service détecté
            $response = $this->generate_ambassador_protocol($stars, $language, $params, $context);
        } elseif ($stars <= 2) {
            // PROTOCOLE RIPOSTE STRATÉGIQUE : Calme, pro, invitation en privé
            $response = $this->generate_strategic_response_protocol($stars, $language, $params, $context);
        } else {
            // Réponse standard pour 3 étoiles
            $response = $this->generate_standard_response($stars, $language, $params, $context);
        }
        
        // Appliquer la variation (température 0.7) pour éviter les doublons
        $response = $this->apply_temperature_variation($response, $language);
        
        // Optimisation SEO
        if (!empty($params['include_seo'])) {
            $response = $this->add_seo_keywords($response, $params);
        }
        
        return trim($response);
    }
    
    /**
     * PROTOCOLE AMBASSADEUR (4-5 étoiles)
     * Remerciement chaleureux + insertion de {$city} + mention du service détecté
     * 
     * @param int $stars Nombre d'étoiles
     * @param string $language Langue
     * @param array $params Paramètres
     * @param array $context Contexte NLP
     * @return string Réponse générée
     */
    private function generate_ambassador_protocol($stars, $language, $params, $context) {
        $templates = $this->templates[$stars][$language] ?? $this->templates[5]['fr'];
        $template = $templates[array_rand($templates)];
        
        // Remplacer les variables de base
        $response = str_replace('{$company}', $params['company'], $template);
        $response = str_replace('{$city}', $params['city'], $response);
        $response = str_replace('{$reviewer_name}', $params['reviewer_name'], $response);
        
        // Injection du contexte avec mention du service détecté
        $response = $this->inject_context($response, $context, $stars, $language);
        
        // Ajouter une mention spécifique du service si détecté
        if (!empty($context['categories'])) {
            $main_category = array_key_first($context['categories']);
            $service_mention = $this->get_service_mention_ambassador($main_category, $language);
            
            // Varier l'emplacement de la mention
            if (mt_rand(0, 100) > 50) {
                $response = str_replace("\n\nL'équipe", "\n\n{$service_mention}\n\nL'équipe", $response);
            }
        }
        
        // Ajouter emoji positif varié
        if ($this->should_vary()) {
            $emoji = $this->variations['emojis_positive'][array_rand($this->variations['emojis_positive'])];
            if (strpos($response, $emoji) === false) {
                $response = str_replace("!\n\n", "! {$emoji}\n\n", $response);
            }
        }
        
        return $response;
    }
    
    /**
     * PROTOCOLE RIPOSTE STRATÉGIQUE (1-2 étoiles)
     * Ton calme et professionnel, invitation à discuter en privé
     * 
     * @param int $stars Nombre d'étoiles
     * @param string $language Langue
     * @param array $params Paramètres
     * @param array $context Contexte NLP
     * @return string Réponse générée
     */
    private function generate_strategic_response_protocol($stars, $language, $params, $context) {
        $templates = $this->templates[$stars][$language] ?? $this->templates[2]['fr'];
        $template = $templates[array_rand($templates)];
        
        // Remplacer les variables de base
        $response = str_replace('{$company}', $params['company'], $template);
        $response = str_replace('{$city}', $params['city'], $response);
        $response = str_replace('{$reviewer_name}', $params['reviewer_name'], $response);
        
        // Injection du contexte
        $response = $this->inject_context($response, $context, $stars, $language);
        
        // Ajouter invitation privée si pas déjà présente
        $private_phrases = [
            'fr' => [
                "Merci de nous contacter en privé pour que nous puissions résoudre ce problème ensemble.",
                "Nous vous invitons à nous contacter directement pour échanger sur cette situation.",
                "Contactez-nous par téléphone ou email afin que nous puissions faire le nécessaire."
            ],
            'en' => [
                "Please contact us privately so we can resolve this issue together.",
                "We invite you to contact us directly to discuss this situation.",
                "Contact us by phone or email so we can take the necessary steps."
            ]
        ];
        
        $has_contact_mention = strpos(mb_strtolower($response), 'contact') !== false;
        if (!$has_contact_mention && $this->should_vary()) {
            $private_phrase = $private_phrases[$language][array_rand($private_phrases[$language])];
            $response = preg_replace('/\n\n(Cordialement|Sincèrement|La Direction)/', "\n\n{$private_phrase}\n\n$1", $response);
        }
        
        return $response;
    }
    
    /**
     * Réponse standard pour 3 étoiles
     * 
     * @param int $stars Nombre d'étoiles
     * @param string $language Langue
     * @param array $params Paramètres
     * @param array $context Contexte NLP
     * @return string Réponse générée
     */
    private function generate_standard_response($stars, $language, $params, $context) {
        $templates = $this->templates[$stars][$language] ?? $this->templates[3]['fr'];
        $template = $templates[array_rand($templates)];
        
        // Remplacer les variables de base
        $response = str_replace('{$company}', $params['company'], $template);
        $response = str_replace('{$city}', $params['city'], $response);
        $response = str_replace('{$reviewer_name}', $params['reviewer_name'], $response);
        
        // Injection du contexte
        $response = $this->inject_context($response, $context, $stars, $language);
        
        return $response;
    }
    
    /**
     * Génère une réponse pour un avis sans texte (étoiles uniquement)
     * 
     * @param int $stars Nombre d'étoiles
     * @param string $language Langue
     * @param array $params Paramètres
     * @return string Réponse générée
     */
    private function generate_no_text_response($stars, $language, $params) {
        $templates = $this->no_text_templates[$stars][$language] ?? $this->no_text_templates[5]['fr'];
        $template = $templates[array_rand($templates)];
        
        // Remplacer les variables de base
        $response = str_replace('{$company}', $params['company'], $template);
        $response = str_replace('{$city}', $params['city'], $response);
        
        // Appliquer variation
        $response = $this->apply_temperature_variation($response, $language);
        
        return $response;
    }
    
    /**
     * Applique la variation (température 0.7) pour diversifier les réponses
     * 
     * @param string $response Réponse originale
     * @param string $language Langue
     * @return string Réponse variée
     */
    private function apply_temperature_variation($response, $language) {
        // Ne pas appliquer systématiquement (basé sur la température)
        if (mt_rand(0, 100) > ($this->temperature * 100)) {
            return $response;
        }
        
        // Varier les remerciements
        if ($this->should_vary() && strpos($response, 'Merci') !== false) {
            $thanks = $this->variations['thanks'][$language][array_rand($this->variations['thanks'][$language])];
            $response = preg_replace('/\bMerci\b/', $thanks, $response, 1);
        }
        
        // Varier les formules de politesse finales
        if ($this->should_vary() && strpos($response, 'Cordialement') !== false) {
            $closing = $this->variations['closings'][$language][array_rand($this->variations['closings'][$language])];
            $response = str_replace('Cordialement', $closing, $response);
        }
        
        // Varier les expressions temporelles
        if ($this->should_vary()) {
            $time_exp = $this->variations['time_expressions'][$language];
            foreach ($time_exp as $exp) {
                if (strpos($response, $exp) !== false && mt_rand(0, 100) > 50) {
                    $new_exp = $time_exp[array_rand($time_exp)];
                    $response = str_replace($exp, $new_exp, $response);
                    break;
                }
            }
        }
        
        // Varier ou supprimer les emojis aléatoirement
        if ($this->should_vary() && mt_rand(0, 100) > 70) {
            // Remplacer un emoji par un autre
            foreach ($this->variations['emojis_positive'] as $emoji) {
                if (strpos($response, $emoji) !== false) {
                    $new_emoji = $this->variations['emojis_positive'][array_rand($this->variations['emojis_positive'])];
                    $response = str_replace($emoji, $new_emoji, $response);
                    break;
                }
            }
        }
        
        return $response;
    }
    
    /**
     * Détermine si une variation doit être appliquée (basé sur la température)
     * 
     * @return bool
     */
    private function should_vary() {
        return mt_rand(0, 100) <= ($this->temperature * 100);
    }
    
    /**
     * Obtient une mention de service pour le protocole Ambassadeur
     * 
     * @param string $category Catégorie détectée
     * @param string $language Langue
     * @return string Mention du service
     */
    private function get_service_mention_ambassador($category, $language) {
        $mentions = [
            'fr' => [
                'service' => "Nous sommes fiers de notre équipe qui met tout en œuvre pour vous satisfaire.",
                'quality' => "La qualité est au cœur de notre engagement envers vous.",
                'price' => "Nous nous efforçons d'offrir le meilleur rapport qualité-prix.",
                'speed' => "Notre réactivité est une priorité pour mieux vous servir.",
                'cleanliness' => "L'hygiène et la propreté sont essentielles pour nous.",
                'location' => "Notre emplacement a été choisi pour vous faciliter la vie.",
                'expertise' => "Notre expertise est le fruit d'années d'expérience à votre service."
            ],
            'en' => [
                'service' => "We're proud of our team who works hard to satisfy you.",
                'quality' => "Quality is at the heart of our commitment to you.",
                'price' => "We strive to offer the best value for money.",
                'speed' => "Our responsiveness is a priority to serve you better.",
                'cleanliness' => "Hygiene and cleanliness are essential to us.",
                'location' => "Our location was chosen to make your life easier.",
                'expertise' => "Our expertise is the result of years of experience serving you."
            ]
        ];
        
        return $mentions[$language][$category] ?? $mentions[$language]['service'];
    }
    
    /**
     * Définit le niveau de température (variation)
     * 
     * @param float $temperature Valeur entre 0.0 et 1.0
     */
    public function set_temperature($temperature) {
        $this->temperature = max(0.0, min(1.0, $temperature));
    }

    /**
     * Instruction impérative à injecter dans le system_message envoyé à OpenRouter (ou tout LLM).
     * Empêche l'IA d'improviser des politesses de base type "Bonjour {Ville}" ou "Nous sommes ravis".
     * [cite: 2026-01-27]
     *
     * @return string Bloc à préfixer ou concaténer au prompt système (posts / réponses type fiche GBP)
     */
    public static function get_post_vip_system_instruction() {
        return "INTERDICTION : Ne commence jamais tes posts par 'Bonjour {Ville}' ou 'Nous sommes ravis'. " .
            "Utilise une approche VIP : commence par un emoji étoilé et une phrase d'accroche sur l'expertise, " .
            "comme '🌟 Ravi de vous voir ici !'. Tes posts doivent faire exactement 3 paragraphes.";
    }

    /**
     * Réécrit le contenu d'un post (Cold Start / Drip-Feed / Wave 3) via des templates VIP 3 paragraphes. [cite: 2026-01-27]
     * Ton adapté à la catégorie : formel (Avocat, Médecin, Notaire…) ou chaleureux (Restaurant, Café…).
     * Variables : {business_name}, {city}, {category}.
     *
     * @param string $content Contenu original du post
     * @param array  $context Optionnel : [ 'city' => string, 'business_name' => string, 'category' => string ]
     * @return string Contenu varié (3 paragraphes, emojis stratégiques, hashtags)
     */
    public function rewrite_post_text($content, array $context = []) {
        $city          = isset( $context['city'] ) && is_string( $context['city'] ) ? trim( $context['city'] ) : 'votre ville';
        $business_name = isset( $context['business_name'] ) && is_string( $context['business_name'] ) ? trim( $context['business_name'] ) : 'notre établissement';
        $category      = isset( $context['category'] ) && is_string( $context['category'] ) ? trim( $context['category'] ) : 'nos services';

        $master_premium_text = "💎 ENCHANTÉ de vous voir ici ! Découvrez {business_name} à {city}. Nous sommes là pour vous avec le sourire — notre équipe {category} vous accueille toute l'année. Chaque avis compte pour nous ! À très bientôt ! #AvisClients #Recommandation #Marketing";

        $tone      = $this->get_tone_for_category( $category );
        $templates = $this->get_vip_post_templates( $tone );

        $idx    = ( count( $templates ) > 0 && function_exists( 'wp_rand' ) ) ? wp_rand( 0, count( $templates ) - 1 ) : 0;
        $chosen = isset( $templates[ $idx ] ) ? $templates[ $idx ] : '';

        $chosen = str_replace( '{city}', $city, $chosen );
        $chosen = str_replace( '{business_name}', $business_name, $chosen );
        $chosen = str_replace( '{category}', $category, $chosen );

        // Forçage VIP : pas de template valide ou texte contient "Bonjour" → retour master premium uniquement.
        $master_resolved = str_replace( [ '{business_name}', '{city}', '{category}' ], [ $business_name, $city, $category ], $master_premium_text );
        if ( ! is_string( $chosen ) || trim( $chosen ) === '' || strlen( $chosen ) < 50 || stripos( $chosen, 'Bonjour' ) !== false ) {
            return $master_resolved;
        }

        return $chosen;
    }

    /**
     * Détermine le ton (formel ou chaleureux) selon la catégorie du profil.
     * Ex. : Avocat, Médecin, Notaire → formel ; Restaurant, Café, Salon → chaleureux.
     *
     * @param string $category Catégorie métier (ex. Avocat, Restaurant)
     * @return string 'formal' ou 'warm'
     */
    private function get_tone_for_category( $category ) {
        if ( $category === '' ) {
            return 'warm';
        }
        $lower = mb_strtolower( $category );
        $formal_keywords = [ 'avocat', 'médecin', 'notaire', 'cabinet', 'docteur', 'lawyer', 'doctor', 'solicitor', 'expert', 'conseil', 'juridique', 'santé', 'medical', 'legal' ];
        foreach ( $formal_keywords as $kw ) {
            if ( strpos( $lower, $kw ) !== false ) {
                return 'formal';
            }
        }
        return 'warm';
    }

    /**
     * Retourne les templates VIP : 5 structures en 3 paragraphes avec emojis et hashtags.
     * Ton formel ou chaleureux selon la catégorie.
     *
     * @param string $tone 'formal' ou 'warm'
     * @return array Liste de templates (chaque template = 3 paragraphes séparés par \n\n)
     */
    private function get_vip_post_templates( $tone ) {
        if ( $tone === 'formal' ) {
            return [
                "🌟 Bienvenue sur notre fiche Google.\n\n{business_name} exerce à {city} dans le domaine {category}. Votre confiance et vos retours nous accompagnent au quotidien.\n\nN'hésitez pas à nous contacter. #Professionnel #Expertise #{category}",
                "📍 Vous recherchez un {category} à {city} ?\n\n{business_name} met son expertise à votre service. Chaque avis nous aide à améliorer notre accompagnement.\n\nMerci de votre confiance. #Recommandation #Qualité #{category}",
                "✨ Découvrez {business_name} — votre partenaire {category} à {city}.\n\nNotre cabinet vous accueille pour vos besoins en {category}. Votre satisfaction reste notre priorité.\n\nÀ votre disposition. #AvisClients #Expertise #{category}",
                "🎯 {business_name} — votre partenaire {category} à {city}.\n\nNotre équipe s'engage à vous offrir un service professionnel et personnalisé. Votre retour compte.\n\nCordialement. #Professionnel #Confiance #{category}",
                "👋 Bienvenue.\n\n{business_name} intervient à {city} dans le secteur {category}. Nous prenons à cœur chaque avis pour progresser.\n\nContactez-nous pour toute question. #Recommandation #Expertise #{category}",
            ];
        }
        return [
            "🌟 Ravi de vous voir ici ! Découvrez {business_name} à {city}.\n\nNous sommes là pour vous avec le sourire — notre équipe {category} vous accueille toute l'année. Chaque avis compte pour nous !\n\nÀ très bientôt ! #AvisClients #Recommandation #{category}",
            "📍 Localisé à {city} ? Bienvenue sur notre fiche Google !\n\n{business_name} vous accueille pour une expérience {category} chaleureuse. N'hésitez pas à nous laisser un avis après votre visite.\n\nOn a hâte de vous revoir ! #Bienvenue #Avis #{category}",
            "👋 Bienvenue à {city} ! {business_name} vous souhaite la bienvenue.\n\nDécouvrez notre univers {category} et partagez votre expérience. Votre retour nous fait grandir au quotidien.\n\nMerci et à bientôt ! #AvisClients #Recommandation #{category}",
            "✨ Bienvenue sur notre fiche ! {business_name} — votre adresse {category} à {city}.\n\nNous adorons lire vos avis et améliorer notre accueil. Laissez-nous votre retour, il compte énormément.\n\nÀ très vite ! #Recommandation #Qualité #{category}",
            "🎯 Vous cherchez un {category} à {city} ? Bienvenue chez {business_name} !\n\nNous vous accueillons avec plaisir. Votre avis aide d'autres personnes à nous découvrir — merci de le partager.\n\nRendez-vous bientôt ! #AvisClients #Bienvenue #{category}",
        ];
    }
    
    /**
     * Injecte le contexte extrait dans la réponse
     * 
     * @param string $template Template de réponse
     * @param array $context Contexte NLP
     * @param int $stars Nombre d'étoiles
     * @param string $language Langue
     * @return string Template avec contexte
     */
    private function inject_context($template, $context, $stars, $language) {
        // Extraire la catégorie principale
        $main_category = !empty($context['categories']) ? array_key_first($context['categories']) : 'service';
        
        // Phrases contextuelles selon les étoiles
        if ($stars >= 4) {
            // Contexte positif
            $positive_phrases = [
                'fr' => [
                    'service' => 'notre accueil vous ait plu',
                    'quality' => 'la qualité de notre travail vous ait satisfait',
                    'price' => 'nos tarifs correspondent à vos attentes',
                    'speed' => 'notre réactivité vous ait convaincu',
                    'cleanliness' => 'vous ayez apprécié notre propreté',
                    'location' => 'notre emplacement soit pratique pour vous',
                    'expertise' => 'notre expertise vous ait rassuré'
                ],
                'en' => [
                    'service' => 'you enjoyed our service',
                    'quality' => 'the quality of our work satisfied you',
                    'price' => 'our prices met your expectations',
                    'speed' => 'our responsiveness convinced you',
                    'cleanliness' => 'you appreciated our cleanliness',
                    'location' => 'our location is convenient for you',
                    'expertise' => 'our expertise reassured you'
                ]
            ];
            
            $context_text = $positive_phrases[$language][$main_category] ?? $positive_phrases[$language]['service'];
            $template = str_replace('{$context_positive}', $context_text, $template);
        }
        
        if ($stars <= 3) {
            // Contexte négatif/amélioration
            $negative_phrases = [
                'fr' => [
                    'service' => 'notre accueil n\'ait pas été à la hauteur',
                    'quality' => 'la qualité n\'ait pas répondu à vos attentes',
                    'price' => 'nos tarifs ne vous aient pas convenu',
                    'speed' => 'les délais n\'aient pas été respectés',
                    'cleanliness' => 'la propreté n\'ait pas été optimale',
                    'location' => 'l\'accès n\'ait pas été pratique',
                    'expertise' => 'notre service n\'ait pas été à la hauteur'
                ],
                'en' => [
                    'service' => 'our service wasn\'t up to par',
                    'quality' => 'the quality didn\'t meet your expectations',
                    'price' => 'our prices didn\'t suit you',
                    'speed' => 'the delays weren\'t respected',
                    'cleanliness' => 'the cleanliness wasn\'t optimal',
                    'location' => 'the access wasn\'t convenient',
                    'expertise' => 'our service wasn\'t up to par'
                ]
            ];
            
            $context_text = $negative_phrases[$language][$main_category] ?? $negative_phrases[$language]['service'];
            $template = str_replace('{$context_negative}', $context_text, $template);
        }
        
        // Mention spécifique
        $mention_text = $this->get_category_name($main_category, $language);
        $template = str_replace('{$context_mention}', $mention_text, $template);
        
        // Phrase spécifique selon le contexte
        $specific = $this->generate_specific_phrase($context, $stars, $language);
        $template = str_replace('{$context_specific}', $specific, $template);
        
        // Phrase d'amélioration
        $improvement = $this->generate_improvement_phrase($main_category, $language);
        $template = str_replace('{$context_improvement}', $improvement, $template);
        
        // Phrase de résolution
        $resolution = $this->generate_resolution_phrase($main_category, $language);
        $template = str_replace('{$context_resolution}', $resolution, $template);
        
        return $template;
    }
    
    /**
     * Génère une phrase spécifique selon le contexte détecté
     */
    private function generate_specific_phrase($context, $stars, $language) {
        if (empty($context['categories'])) {
            return '';
        }
        
        $phrases = [
            'fr' => [
                5 => "Votre recommandation compte énormément pour nous ! 🙏",
                4 => "Nous travaillons chaque jour pour mériter vos 5 étoiles !",
                3 => "Vos suggestions nous aident à progresser.",
                2 => "Nous voulons transformer votre expérience.",
                1 => "Donnez-nous une chance de nous rattraper."
            ],
            'en' => [
                5 => "Your recommendation means the world to us! 🙏",
                4 => "We work every day to earn your 5 stars!",
                3 => "Your suggestions help us improve.",
                2 => "We want to transform your experience.",
                1 => "Give us a chance to make it right."
            ]
        ];
        
        return $phrases[$language][$stars] ?? '';
    }
    
    /**
     * Génère une phrase d'amélioration
     */
    private function generate_improvement_phrase($category, $language) {
        $phrases = [
            'fr' => [
                'service' => "Nous formons continuellement notre équipe pour offrir le meilleur accueil.",
                'quality' => "Nous révisons nos processus pour garantir une qualité irréprochable.",
                'price' => "Nous cherchons toujours le meilleur rapport qualité-prix pour nos clients.",
                'speed' => "Nous optimisons nos délais pour mieux vous servir.",
                'cleanliness' => "Nous renforçons nos standards d'hygiène et de propreté.",
                'location' => "Nous améliorons l'accessibilité et le confort de nos locaux.",
                'expertise' => "Nous investissons dans la formation de nos équipes."
            ],
            'en' => [
                'service' => "We continuously train our team to provide the best service.",
                'quality' => "We're reviewing our processes to ensure impeccable quality.",
                'price' => "We always seek the best value for our customers.",
                'speed' => "We're optimizing our timelines to serve you better.",
                'cleanliness' => "We're strengthening our hygiene and cleanliness standards.",
                'location' => "We're improving the accessibility and comfort of our premises.",
                'expertise' => "We're investing in training our teams."
            ]
        ];
        
        return $phrases[$language][$category] ?? $phrases[$language]['service'];
    }
    
    /**
     * Génère une phrase de résolution pour les avis négatifs
     */
    private function generate_resolution_phrase($category, $language) {
        $phrases = [
            'fr' => [
                'service' => "Nous souhaitons vous offrir un geste commercial pour compenser cette déception.",
                'quality' => "Nous voulons corriger immédiatement ce problème de qualité.",
                'price' => "Discutons ensemble d'une solution tarifaire adaptée.",
                'speed' => "Nous nous engageons à respecter les délais à l'avenir.",
                'cleanliness' => "Nous avons pris des mesures immédiates pour améliorer la propreté.",
                'location' => "Nous cherchons des solutions pour faciliter votre accès.",
                'expertise' => "Nous voulons vous proposer l'intervention d'un expert senior."
            ],
            'en' => [
                'service' => "We'd like to offer you a goodwill gesture to compensate for this disappointment.",
                'quality' => "We want to immediately correct this quality issue.",
                'price' => "Let's discuss an appropriate pricing solution together.",
                'speed' => "We commit to respecting timelines in the future.",
                'cleanliness' => "We've taken immediate measures to improve cleanliness.",
                'location' => "We're looking for solutions to facilitate your access.",
                'expertise' => "We'd like to offer you the intervention of a senior expert."
            ]
        ];
        
        return $phrases[$language][$category] ?? $phrases[$language]['service'];
    }
    
    /**
     * Obtient le nom de la catégorie dans la langue appropriée
     */
    private function get_category_name($category, $language) {
        $names = [
            'fr' => [
                'service' => 'notre service',
                'quality' => 'la qualité',
                'price' => 'nos tarifs',
                'speed' => 'nos délais',
                'cleanliness' => 'la propreté',
                'location' => 'notre emplacement',
                'expertise' => 'notre expertise'
            ],
            'en' => [
                'service' => 'our service',
                'quality' => 'the quality',
                'price' => 'our prices',
                'speed' => 'our timelines',
                'cleanliness' => 'the cleanliness',
                'location' => 'our location',
                'expertise' => 'our expertise'
            ]
        ];
        
        return $names[$language][$category] ?? $names[$language]['service'];
    }
    
    /**
     * Ajoute des mots-clés SEO naturellement dans la réponse
     */
    private function add_seo_keywords($response, $params) {
        // Les mots-clés sont déjà intégrés naturellement via {$company} et {$city}
        // Cette fonction peut être étendue pour ajouter des mots-clés sectoriels
        return $response;
    }
}
