<?php
/**
 * Sınav Koçu - 1SMS API Servisi ve CRM İletişim Günlüğü
 * Karakter Seti: UTF-8
 */

// 1SMS API Ayarları
if (!defined('SMS_API_URL'))  define('SMS_API_URL',   'http://panel.1sms.com.tr:8080/api/smspost/v1');
if (!defined('SMS_USER'))     define('SMS_USER',      'trdoktor');
if (!defined('SMS_PASS'))     define('SMS_PASS',      '706c50f65e050ad266b88d821ec1a057');
if (!defined('SMS_HEADER'))   define('SMS_HEADER',    'Sinerji');

/** * Telefon numarasını 905XXXXXXXXX formatına normalize eder.
 */
function sms_normalize(string $raw): ?string {
    $s = preg_replace('/\D+/', '', $raw);
    if (strpos($s, '0') === 0 && strlen($s) === 11) return '9'.$s;
    if (strlen($s) === 10 && strpos($s, '5') === 0) return '90'.$s;
    return $s;
}

/** * Tek numaraya SMS gönderir ve CRM geçmişine (communication_logs) kaydeder.
 * @param string $phone Hedef telefon numarası
 * @param string $message SMS içeriği
 * @param int|null $user_id Loglama için müşteri ID'si (Opsiyonel)
 */
function sms_send_simple(string $phone, string $message, $user_id = null): array {
    // Veritabanı bağlantısını globalden alıyoruz (db.php'den gelen $db değişkeni)
    global $db;

    $msisdn = sms_normalize($phone);
    if (!$msisdn) return ['ok' => false, 'error' => 'Geçersiz telefon formatı'];

    // XML Paketi Hazırlama
    $xml = '<?xml version="1.0" encoding="UTF-8"?><sms>'
         . '<username>'.SMS_USER.'</username><password>'.SMS_PASS.'</password>'
         . '<header>'.SMS_HEADER.'</header><validity>2880</validity>'
         . '<message><gsm><no>'.$msisdn.'</no></gsm><msg><![CDATA['.$message.']]></msg></message></sms>';

    // cURL ile API İstek Gönderimi
    $ch = curl_init(SMS_API_URL);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST           => true,
        CURLOPT_HTTPHEADER     => ['Content-Type: text/xml; charset=UTF-8'],
        CURLOPT_POSTFIELDS     => $xml,
        CURLOPT_TIMEOUT        => 20,
    ]);
    
    $body = curl_exec($ch);
    $code = (int)curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
    curl_close($ch);

    $is_success = ($code >= 200 && $code < 300);

    // --- CRM LOGLAMA SİSTEMİ ---
    if ($db) {
        try {
            $status_text = $is_success ? 'sent' : 'failed';
            
            // communication_logs tablosuna kaydet (Müşteri Detay sayfasında görünen kısım)
            $st = $db->prepare("INSERT INTO communication_logs (user_id, type, recipient, message, status) VALUES (?, 'sms', ?, ?, ?)");
            $st->execute([$user_id, $msisdn, $message, $status_text]);
            
            // Gerekirse teknik log tablosuna (sms_log) detayları yaz
            // Bu tablo sende varsa çalışır, yoksa hata vermemesi için yorum satırına alabilirsin.
            /*
            $log_st = $db->prepare("INSERT INTO sms_log (recipient, message, http_code, response) VALUES (?,?,?,?)");
            $log_st->execute([$msisdn, $message, $code, $body]);
            */
            
        } catch (PDOException $e) {
            error_log("SMS Log Yazma Hatası: " . $e->getMessage());
        }
    }

    return ['ok' => $is_success, 'body' => $body, 'http_code' => $code];
}