<?php
/**
 * Fonction d'envoi SMS via bulksms.ma
 */
/**
 * Configuration SMS - À personnaliser selon votre compte bulksms.ma
 */
class SMSConfig {
    const API_URL = 'https://api.bulksms.ma/api/v1/send-sms'; // URL API bulksms.ma
    const API_KEY = 'VOTRE_API_KEY'; // À remplacer par votre clé API
    const SENDER_ID = 'HIBA_ASSUR'; // Nom de l'expéditeur (max 11 caractères)
    const PHONE_PREFIX = '+212'; // Préfixe téléphonique du Maroc
}

/**
 * Formate le numéro de téléphone pour SMS
 */
function formatPhoneForSMS($phone, $prefix = '+212') {
    $phone = preg_replace('/[^0-9]/', '', $phone);
    
    // Si le numéro commence par 0, on le remplace par le préfixe
    if (substr($phone, 0, 1) === '0') {
        $phone = $prefix . substr($phone, 1);
    }
    // Si le numéro ne commence pas par +, on ajoute le préfixe
    elseif (substr($phone, 0, 1) !== '+') {
        $phone = $prefix . $phone;
    }
    
    return $phone;
}

/**
 * Génère le message SMS personnalisé
 */
function generateSMSMessage($client_name, $policy_number, $end_date, $days_remaining) {
    $formatted_date = date('d/m/Y', strtotime($end_date));
    
    $message = "Bonjour {$client_name},\n\n";
    $message .= "Votre police d'assurance N° {$policy_number} expire dans {$days_remaining} jour(s) le {$formatted_date}.\n\n";
    $message .= "Veuillez nous contacter pour le renouvellement.\n\n";
    $message .= "HIBA ASSURANCE\n";
    $message .= "Tél: 0524292111";
    
    return $message;
}

/**
 * Envoie un SMS via l'API bulksms.ma
 */
function sendSMS($phone, $message) {
    $phone = formatPhoneForSMS($phone);
    
    // Données à envoyer à l'API
    $data = [
        'api_key' => SMSConfig::API_KEY,
        'sender' => SMSConfig::SENDER_ID,
        'recipient' => $phone,
        'message' => $message
    ];
    
    // Configuration cURL
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, SMSConfig::API_URL);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/json',
        'Accept: application/json'
    ]);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
    $response = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $curl_error = curl_error($ch);
    curl_close($ch);
    
    // Vérifier les erreurs cURL
    if ($curl_error) {
        return [
            'success' => false,
            'error' => 'Erreur cURL: ' . $curl_error,
            'phone' => $phone
        ];
    }
    
    // Décoder la réponse JSON
    $result = json_decode($response, true);
    
    // Vérifier le code de réponse HTTP
    if ($http_code === 200) {
        // Analyser la réponse selon la structure de l'API bulksms.ma
        if (isset($result['status']) && $result['status'] === 'success') {
            return [
                'success' => true,
                'message' => 'SMS envoyé avec succès',
                'phone' => $phone,
                'message_id' => $result['message_id'] ?? null
            ];
        } else {
            return [
                'success' => false,
                'error' => $result['message'] ?? 'Erreur inconnue de l\'API',
                'phone' => $phone
            ];
        }
    } else {
        return [
            'success' => false,
            'error' => "Erreur HTTP {$http_code}: " . ($result['message'] ?? 'Erreur serveur'),
            'phone' => $phone
        ];
    }
}

/**
 * Envoie un SMS de test
 */
function sendTestSMS($phone) {
    $message = generateSMSMessage(
        'Client Test',
        'TEST-2025-001',
        date('Y-m-d', strtotime('+15 days')),
        15
    );
    
    return sendSMS($phone, $message);
}

/**
 * Simule l'envoi SMS (pour tests sans consommer de crédits)
 */
function simulateSMS($phone, $message) {
    // Simulation d'un appel API
    $success = (rand(1, 10) > 2); // 80% de succès simulé
    
    if ($success) {
        // Simuler un délai d'envoi
        usleep(500000); // 0.5 secondes
        return [
            'success' => true,
            'message' => 'SMS envoyé avec succès (simulation)',
            'phone' => formatPhoneForSMS($phone),
            'message_id' => 'SIM_' . time() . '_' . rand(1000, 9999)
        ];
    } else {
        return [
            'success' => false,
            'error' => 'Échec de l\'envoi - Numéro invalide ou service indisponible (simulation)',
            'phone' => formatPhoneForSMS($phone)
        ];
    }
}

/**
 * Log l'envoi SMS dans la base de données
 */
function logSMSSent($conn, $policy_id, $client_cin, $phone, $success, $message = '', $message_id = null) {
    $status = $success ? 'sent' : 'failed';
    $current_time = date('Y-m-d H:i:s');
    $log_message = $success ? "SMS envoyé avec succès" : $message;
    
    $query = "INSERT INTO notification_log (policy_id, client_cin, notification_type, status, sent_at, message, phone_email, message_id) 
              VALUES (?, ?, 'SMS', ?, ?, ?, ?, ?)";
    
    $stmt = $conn->prepare($query);
    if ($stmt) {
        $stmt->bind_param("issssss", $policy_id, $client_cin, $status, $current_time, $log_message, $phone, $message_id);
        $result = $stmt->execute();
        $stmt->close();
        return $result;
    }
    
    return false;
}

/**
 * Valide un numéro de téléphone marocain
 */
function isValidMoroccanPhone($phone) {
    $phone = preg_replace('/[^0-9]/', '', $phone);
    
    // Format marocain : 06XXXXXXXX ou 07XXXXXXXX (mobile)
    if (preg_match('/^0[67][0-9]{8}$/', $phone)) {
        return true;
    }
    
    // Format international : +2126XXXXXXXX ou +2127XXXXXXXX
    if (preg_match('/^\+2126[0-9]{8}$/', $phone) || preg_match('/^\+2127[0-9]{8}$/', $phone)) {
        return true;
    }
    
    // Format sans préfixe international : 2126XXXXXXXX ou 2127XXXXXXXX
    if (preg_match('/^2126[0-9]{8}$/', $phone) || preg_match('/^2127[0-9]{8}$/', $phone)) {
        return true;
    }
    
    return false;
}
?>
