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

// Aktifkan error reporting untuk debugging (Hanya untuk pengembangan, matikan di produksi)
error_reporting(E_ALL);
ini_set('display_errors', 1);

session_start();  // Mulai sesi untuk mengakses $_SESSION

// Cek apakah token CSRF ada dan valid
// if (isset($_POST['csrf_token']) && $_POST['csrf_token'] === $_SESSION['csrf_token']) {
//     // Token valid, lanjutkan dengan pemrosesan gambar
// } else {
//     // Token tidak valid, hentikan pemrosesan dan berikan respons error
//     echo json_encode(['success' => false, 'message' => 'CSRF token tidak valid.']);
//     exit;
// }

// Konfigurasi OCR API
$apiKey = 'K81335749188957';
$imageData = $_POST['image'];

// Debug: Cek apakah gambar diterima dengan benar
if (isset($imageData)) {
   // file_put_contents('debug_received_image.txt', $imageData); // Simpan data base64 yang diterima
} else {
    echo json_encode(['success' => false, 'message' => 'Gambar tidak diterima.']);
    exit;
}

// Validasi Base64 Gambar
if (preg_match('/^data:image\/(jpeg|jpg|png);base64,/', $imageData)) {
    // Menghapus header data:image/xxx;base64,
    $imageData = preg_replace('/^data:image\/(jpeg|jpg|png);base64,/', '', $imageData);
    $imageData = str_replace(' ', '+', $imageData); // Pastikan spasi digantikan dengan tanda '+'
    $decodedImage = base64_decode($imageData);

    // Periksa apakah decoding berhasil
    if ($decodedImage === false) {
        echo json_encode(['success' => false, 'message' => 'Gagal mendekode gambar.']);
        exit;
    }

    // Simpan Gambar Sementara
    $uploadDir = 'upload-mitra/ktp/';
    $fileName = uniqid() . '.jpg';  // Menggunakan .jpg sebagai ekstensi
    $filePath = $uploadDir . $fileName;

    // Pastikan direktori upload ada
    if (!is_dir($uploadDir)) {
        mkdir($uploadDir, 0777, true);  // Membuat direktori jika belum ada
    }

    // Debug: Periksa apakah file berhasil disimpan
    $fileWriteStatus = file_put_contents($filePath, $decodedImage);
    if (!$fileWriteStatus) {
        echo json_encode(['success' => false, 'message' => 'Gagal menyimpan gambar ke server.']);
        exit;
    }

    // Proses OCR
    $image_data = base64_encode(file_get_contents($filePath)); // Membaca kembali file dan mengencode ke base64
    $url = 'https://api.ocr.space/parse/image';
    $data = array(
        'apikey' => $apiKey,
        'language' => 'eng',
        'isOverlayRequired' => 'true',
        'OCREngine' => 2,
        'base64Image' => 'data:image/jpeg;base64,' . $image_data
    );

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

    $response = curl_exec($curl);
    curl_close($curl);

    // Debug: Cek hasil dari API OCR
  //  file_put_contents('debug_ocr_response.txt', $response); // Simpan respons API OCR untuk pemeriksaan

    if (!$response) {
        echo json_encode(['success' => false, 'message' => 'Gagal menghubungi API OCR.']);
        exit;
    }

    $result = json_decode($response, true);

    if ($result['IsErroredOnProcessing'] == false) {
       $text = $result['ParsedResults'][0]['ParsedText'];

            // NIK (16 digit angka)
            preg_match('/NIK\s*[:|\s]*([0-9]{16})/', $text, $nik);
        
            // Nama (Berhenti saat menemukan "Tempat/Tgl Lahir" atau baris baru)
            preg_match('/Nama\s*[:|\s]*(.+?)(?=\n|Tempat\/Tgl Lahir|Alamat:|$)/i', $text, $nama);
        
            // Tempat/Tgl Lahir (Dipisahkan antara tempat dan tanggal)
            preg_match('/Tempat\/Tgl Lahir\s*[:|\s]*([^\n]+)/i', $text, $tempat_tgl_lahir);
        
            // Jenis Kelamin
            preg_match('/Jenis Kelamin\s*[:|\s]*([^\n]+)/i', $text, $jenis_kelamin);
        
            // Alamat (Berhenti saat menemukan "RT/RW" atau baris baru)
            preg_match('/Alamat\s*[:|\s]*(.+?)(?=\n|RT\/RW|$)/i', $text, $alamat);
        
            // RT/RW (Format angka dengan pemisah "/")
            preg_match('/RT\/RW\s*[:|\s]*([0-9]{3}\/[0-9]{3})/', $text, $rt_rw);
        
            // Kelurahan/Desa
            preg_match('/Kel\/Desa\s*[:|\s]*([^\n]+)/i', $text, $kel_desa);
        
            // Kecamatan
            preg_match('/Kecamatan\s*[:|\s]*([^\n]+)/i', $text, $kecamatan);
        
            // Agama
            preg_match('/Agama\s*[:|\s]*([^\n]+)/i', $text, $agama);
        
            // Status Perkawinan
            preg_match('/Status Perkawinan\s*[:|\s]*([^\n]+)/i', $text, $kawin);
        
            // Kabupaten/Kota
            preg_match('/(?:KABUPATEN|KOTA)\s*(.+)/i', $text, $kabupaten);
        
            // Pisahkan Tempat dan Tanggal Lahir
            $tempat_lahir = '';
            $tanggal_lahir = '';
        
            if (!empty($tempat_tgl_lahir[1])) {
                // Jika dipisahkan dengan koma atau spasi
                $tempat_tgl = preg_split('/,\s*|\s/', $tempat_tgl_lahir[1]);
                if (count($tempat_tgl) >= 2) {
                    $tempat_lahir = trim($tempat_tgl[0]); // Tempat Lahir
                    $tanggal_lahir = trim($tempat_tgl[1]); // Tanggal Lahir
                }
            }
        
            // Deklarasi variabel untuk mencegah data kosong atau salah posisi
            $nik = $nik[1] ?? 'Data tidak ada';
            $nama = $nama[1] ?? 'Data tidak ada';
            $tempat_lahir = $tempat_lahir ?: 'Data tidak ada';
            $tanggal_lahir = $tanggal_lahir ?: 'Data tidak ada';
            $jenis_kelamin = $jenis_kelamin[1] ?? 'Data tidak ada';
            $alamat = $alamat[1] ?? 'Data tidak ada';
            $rt_rw = $rt_rw[1] ?? 'Data tidak ada';
            $kel_desa = $kel_desa[1] ?? 'Data tidak ada';
            $kecamatan = $kecamatan[1] ?? 'Data tidak ada';
            $agama = $agama[1] ?? 'Data tidak ada';
            $kawin = $kawin[1] ?? 'Data tidak ada';
            $kabupaten = $kabupaten[1] ?? 'Data tidak ada';
            $file_img = $fileName ?? 'Data tidak ada';
        
            // Buat response dalam format array
            $response = [
                'success' => true,
                'nik' => $nik,
                'nama' => trim($nama),
                'tempat_lahir' => $tempat_lahir,
                'tanggal_lahir' => $tanggal_lahir,
                'jenis_kelamin' => trim($jenis_kelamin),
                'alamat' => trim($alamat),
                'rt_rw' => $rt_rw,
                'kel_desa' => $kel_desa,
                'kecamatan' => $kecamatan,
                'agama' => trim($agama),
                'kawin' => trim($kawin),
                'kabupaten' => $kabupaten,
                'file_img' => $file_img
            ];

    } else {
        $response = array(
            'success' => false,
            'message' => 'Gagal memproses gambar.'
        );
    }

    // Hapus Gambar Sementara
    // if (file_exists($filePath)) {
    //     unlink($filePath);
    // }

} else {
    $response = array(
        'success' => false,
        'message' => 'Format gambar tidak valid. Pastikan gambar dikirim dalam format JPEG atau PNG.'
    );
}

// Mengembalikan Data dalam Format JSON
header('Content-Type: application/json');
echo json_encode($response);
?>
