<?php
include '../config.php';


// ======================
// FIREBASE REALTIME DATABASE YAZMA FONKSİYONU
// ======================
function firebaseYaz($gonderici_id, $alici_id, $mesaj, $resim = null) {
    
    // Mesaj ID oluştur (JS'deki mantıkla aynı)
    if (intval($alici_id) > intval($gonderici_id)) {
        $msj_id = "mesaj_" . $gonderici_id . "-" . $alici_id;
    } else {
        $msj_id = "mesaj_" . $alici_id . "-" . $gonderici_id;
    }
    
    $saat = date("H:i");
    
    $data = [
        'gonderici' => $gonderici_id,
        'alici' => $alici_id,
        'msj' => $mesaj,
        'resim' => $resim,
        'time' => $saat
    ];
    
    // Firebase Realtime Database URL
    $firebase_url = "https://hupvo-app-b2674-default-rtdb.firebaseio.com/mesajlar/" . $msj_id . ".json";
    
    // Veriyi yaz (PUT)
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $firebase_url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    // 300ms bekle ve sil (notification trigger için)
    usleep(300000);
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $firebase_url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    
    curl_exec($ch);
    curl_close($ch);
    
    return $response;
}


// ======================
//  GÜZELIM DEĞİŞTİR FONKSİYONU
// ======================
function guzelimDegistir($text) {
    // "güzelim" kelimesi varsa rastgele birisiyle değiştir
    if (stripos($text, 'güzelim') !== false) {
        $alternatifler = [
            'aşkım',
            'yakışıklım',
            'yakışıklı',
            'bebeğim',
            'hayatım',
            'canım',
            'bitanem',
            'tatlım'
        ];
        
        $rastgele = $alternatifler[array_rand($alternatifler)];
        
        // Büyük/küçük harf duyarsız değiştir
        $text = preg_replace('/güzelim/iu', $rastgele, $text);
    }
    
    return $text;
}


// ======================
//  MASKONAYLA FONKSİYONU
// ======================
function maskOnayla($text)
{
    // Eğer {onayla} yoksa → asla maskeleme
    if (strpos($text, '{onayla}') === false) {
        return $text;
    }

    // {onayla} varsa başa taşı
    $text = '{onayla} ' . trim(str_replace('{onayla}', '', $text));

    // Telefon numarası pattern'leri (boşluk/tire/nokta ile ayrılmış olabilir)
    // 1. 0 ile başlayan 10-11 hane: 0505 123 45 67, 05051234567
    // 2. 5 ile başlayan 10 hane: 505 123 45 67, 5051234567
    // 3. Kısa numaralar: 0532111212 (10 hane)
    
    $pattern = '/(?:0[\s\.\-]*)?[5-9](?:[\s\.\-]*\d){8,10}/';

    return preg_replace_callback($pattern, function ($m) {
        $number = $m[0];
        // Sadece rakamları al
        $digits = preg_replace('/[^\d]/', '', $number);
        
        // En az 9 rakam varsa maskele
        if (strlen($digits) >= 9) {
            return '0*** *** ** **';
        }
        
        // Yoksa olduğu gibi bırak
        return $number;
    }, $text);
}






// ======================
//   TOKEN KONTROLÜ
// ======================

$SECRET_TOKEN = "rxQw9udYO8sxkP9vxuQ8JUWXWFvBvI";
$gelen_token = isset($_POST['token']) ? $_POST['token'] : '';

if ($gelen_token !== $SECRET_TOKEN) {
    http_response_code(401);
    echo json_encode(['durum' => 'hata', 'mesaj' => 'Yetkisiz Erisim!']);
    exit;
}



// ======================
//   GİRİŞ PARAMETRELERİ
// ======================

$gonderen_id = isset($_POST['gonderen_id']) ? $_POST['gonderen_id'] : null;
$alan_id     = isset($_POST['alan_id'])     ? $_POST['alan_id']     : null;
$msj         = isset($_POST['icerik'])      ? $_POST['icerik']      : '';

if (!$gonderen_id || !$alan_id || empty($msj)) {
    http_response_code(400);
    echo json_encode(['durum' => 'hata', 'mesaj' => 'Eksik parametreler!']);
    exit;
}



// ======================
//   MESAJI İŞLE
// ======================

// Önce güzelim kelimesini değiştir
$msj = guzelimDegistir($msj);

// Sonra telefon numarasını maskele
$msj = maskOnayla($msj);



// ======================
//   IP AL
// ======================

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}

$zaman = time();




// ======================
//   PANEL KONTROLÜ (IP ::4)
// ======================

// Eğer bu konuşmada panelden cevap verilmişse (IP=::4), AI cevabını ekleme
$panelKontrol = $db->prepare("
    SELECT 1
    FROM mesajlar
    WHERE (
        (gonderen_id = :g AND alan_id = :a)
        OR (gonderen_id = :a AND alan_id = :g)
    )
    AND ip = '::4'
    LIMIT 1
");
$panelKontrol->execute([
    ':g' => $gonderen_id,
    ':a' => $alan_id
]);

if ($panelKontrol->fetchColumn()) {
    // Panelden cevap verilmiş, AI cevabını ekleme
    http_response_code(200);
    echo json_encode(['durum' => 'iptal', 'mesaj' => 'Panelden cevap verilmis, AI cevabi eklenmedi.']);
    exit;
}


// ======================
//   DB KAYIT
// ======================

try {

    $query = $db->prepare("
        INSERT INTO mesajlar (gonderen_id, alan_id, icerik, ip, zaman)
        VALUES (:gonderen_id, :alan_id, :icerik, :ip, :zaman)
    ");

    $insert = $query->execute([
        ':gonderen_id' => $gonderen_id,
        ':alan_id'     => $alan_id,
        ':icerik'      => $msj,
        ':ip'          => "::3",
        ':zaman'       => $zaman
    ]);

    if ($insert) {

        // Okundu işaretle
        $uquery = $db->prepare("UPDATE mesajlar SET okundu = ? WHERE alan_id = ? AND gonderen_id = ?");
        $uquery->execute([1, $gonderen_id, $alan_id]);

        // Firebase'e yaz (real-time bildirim için)
        $botRow = $db->query("SELECT user_picture FROM kullanicilar WHERE user_id = '$gonderen_id'")->fetch(PDO::FETCH_ASSOC);
        $bot_resim = $botRow ? "https://app.heysen.net/" . $botRow['user_picture'] : null;
        firebaseYaz($gonderen_id, $alan_id, $msj, $bot_resim);

        // Bildirim gönder
        $url = "https://app.heysen.net/admin/functions.php";

        $bilgi = [
            'from' => $gonderen_id,
            'to'   => $alan_id,
            'type' => 'bildirim_gonder',
            'type2'=> 'mesaj'
        ];

        $ch = curl_init();

        curl_setopt_array($ch, [
            CURLOPT_URL => $url,
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => $bilgi
        ]);

        curl_exec($ch);
        curl_close($ch);

        http_response_code(200);
        echo json_encode(['durum' => 'basarili', 'mesaj' => 'Mesaj basariyla gonderildi.']);
    }

    else {
        http_response_code(500);
        echo json_encode(['durum' => 'hata', 'mesaj' => 'Mesaj gonderilirken bir hata olustu.']);
    }

} catch (PDOException $e) {

    http_response_code(500);
    echo json_encode(['durum' => 'hata', 'mesaj' => 'Veritabani hatasi olustu.']);
}

?>
