<?php
/**
 * Service QR Code
 * Génération de QR codes et liens directs pour le widget
 */

namespace App\Services;

class QRCodeService
{
    private string $baseUrl;
    
    public function __construct()
    {
        $this->baseUrl = defined('BASE_URL') ? BASE_URL : '';
    }
    
    /**
     * Générer l'URL du widget pour une entreprise
     */
    public function getWidgetUrl(string $token): string
    {
        return $this->baseUrl . '/widget/' . $token;
    }
    
    /**
     * Générer l'URL du QR Code (via API Google Charts)
     */
    public function getQRCodeUrl(string $token, int $size = 300): string
    {
        $widgetUrl = $this->getWidgetUrl($token);
        $encodedUrl = urlencode($widgetUrl);
        
        return "https://chart.googleapis.com/chart?cht=qr&chs={$size}x{$size}&chl={$encodedUrl}&choe=UTF-8";
    }
    
    /**
     * Générer l'URL du QR Code (via QR Server API - alternative)
     */
    public function getQRCodeUrlAlt(string $token, int $size = 300): string
    {
        $widgetUrl = $this->getWidgetUrl($token);
        $encodedUrl = urlencode($widgetUrl);
        
        return "https://api.qrserver.com/v1/create-qr-code/?size={$size}x{$size}&data={$encodedUrl}";
    }
    
    /**
     * Générer le lien WhatsApp direct
     */
    public function getWhatsAppLink(string $phoneNumber, string $message = ''): string
    {
        $phone = preg_replace('/[^0-9]/', '', $phoneNumber);
        $encodedMessage = urlencode($message);
        
        return "https://wa.me/{$phone}?text={$encodedMessage}";
    }
    
    /**
     * Générer le QR Code WhatsApp
     */
    public function getWhatsAppQRCode(string $phoneNumber, string $message = '', int $size = 300): string
    {
        $waLink = $this->getWhatsAppLink($phoneNumber, $message);
        $encodedUrl = urlencode($waLink);
        
        return "https://api.qrserver.com/v1/create-qr-code/?size={$size}x{$size}&data={$encodedUrl}";
    }
    
    /**
     * Générer le code HTML d'intégration du widget
     */
    public function getEmbedCode(string $token): string
    {
        $scriptUrl = $this->baseUrl . '/widget/embed.js';
        
        return '<script src="' . htmlspecialchars($scriptUrl) . '" data-token="' . htmlspecialchars($token) . '"></script>';
    }
    
    /**
     * Générer tous les liens pour une entreprise
     */
    public function generateAllLinks(array $entreprise): array
    {
        $token = $entreprise['widget_token'] ?? '';
        $whatsappNumber = $entreprise['twilio_whatsapp_number'] ?? '';
        $nom = $entreprise['nom'] ?? 'Support';
        
        $links = [
            'widget' => [
                'url' => $this->getWidgetUrl($token),
                'qr_code' => $this->getQRCodeUrlAlt($token, 300),
                'embed_code' => $this->getEmbedCode($token),
                'description' => 'Lien direct vers le chat support'
            ]
        ];
        
        if (!empty($whatsappNumber)) {
            $defaultMessage = "Bonjour {$nom}, j'ai besoin d'aide.";
            $links['whatsapp'] = [
                'url' => $this->getWhatsAppLink($whatsappNumber, $defaultMessage),
                'qr_code' => $this->getWhatsAppQRCode($whatsappNumber, $defaultMessage, 300),
                'description' => 'Lien direct WhatsApp'
            ];
        }
        
        return $links;
    }
    
    /**
     * Télécharger le QR Code en tant qu'image
     */
    public function downloadQRCode(string $url): ?string
    {
        $imageData = file_get_contents($url);
        
        if ($imageData === false) {
            return null;
        }
        
        return base64_encode($imageData);
    }
}
