<?php
ob_start();
session_start();
date_default_timezone_set('Asia/Jakarta');

error_reporting(E_ALL);
ini_set('display_errors', 1);

include_once '../../function/connect.php';
include_once '../../main/API/functions.php'; // Pastikan $koneksi ada di dalam connect.php

// 1. CEK LOGIN
if (isset($_SESSION['id'])) {
    header("Location:../index.php");
    exit;
}

// 2. PROSES REGISTER
if (isset($_POST['submit'])) {

    // Sanitasi Input Dasar
    $username       = strtolower(trim($_POST['username']));
    $password_raw   = $_POST['password'];
    $konfirmasi_raw = $_POST['konfirmasi_pass'];
    $email          = trim($_POST['email']);
    $no_hp          = trim($_POST['no_whatsapp']);
    $bank           = $_POST['bank'];
    $nama           = $_POST['pemilik_rekening'];
    $norek          = $_POST['norek'];
    $refferal       = trim($_POST['refferal']);
    $captcha        = $_POST['captcha'];
    $captcha_asli   = $_POST['captcha_asli'];

    // VALIDASI INPUT
    if (empty($username) || empty($password_raw) || empty($email) || empty($nama) || empty($norek)) {
        die("Semua data wajib diisi!");
    }

    if ($password_raw !== $konfirmasi_raw) {
        die("Konfirmasi password tidak cocok!");
    }

    if ($captcha !== $captcha_asli) {
        die("Captcha salah!");
    }

    // Hashing Password (Standar Industri)
    $password_hashed = password_hash($password_raw, PASSWORD_DEFAULT);

    // CEK USERNAME (Prepared Statement)
    $stmt_cek = $koneksi->prepare("SELECT id FROM tb_user WHERE username = ?");
    $stmt_cek->bind_param("s", $username);
    $stmt_cek->execute();
    if ($stmt_cek->get_result()->num_rows > 0) {
        die("Username sudah terdaftar!");
    }

    // MULAI TRANSAKSI
    $koneksi->begin_transaction();

    try {
        // 3. BUAT USER DI API
        $createApi = $SGX->create($username);
        if (!$createApi) {
            throw new Exception("API tidak merespon.");
        }

        $statusApi = $createApi['status'] ?? null;
        $msgApi    = strtolower($createApi['msg'] ?? '');

        // Abaikan jika status 1 atau user sudah ada di provider
        if ($statusApi != 1 && strpos($msgApi, 'duplicated') === false) {
            throw new Exception("Gagal mendaftarkan user ke server game.");
        }

        // 4. INSERT KE tb_user
        $stmt1 = $koneksi->prepare("INSERT INTO tb_user (extplayer, username, password, nama_lengkap, email, no_hp, level, refferal, status, status_game, kyc) VALUES (?, ?, ?, ?, ?, ?, 'user', ?, 'Active', 'ongame', '0')");
        $stmt1->bind_param("sssssss", $username, $username, $password_hashed, $nama, $email, $no_hp, $refferal);
        
        if (!$stmt1->execute()) {
            throw new Exception("Gagal mendaftarkan user ke database.");
        }

        // Ambil ID User yang baru saja dibuat
        $new_user_id = $koneksi->insert_id;

        // 5. INSERT KE tb_saldo
        $stmt2 = $koneksi->prepare("INSERT INTO tb_saldo (id_user, active, transfer, pending, payout) VALUES (?, 0, 0, 0, 0)");
        $stmt2->bind_param("i", $new_user_id);
        if (!$stmt2->execute()) {
            throw new Exception("Gagal membuat data saldo.");
        }

        // 6. INSERT KE tb_bank
        $stmt3 = $koneksi->prepare("INSERT INTO tb_bank (icon, nama_bank, nomor_rekening, nama_pemilik, id_user, level) VALUES ('', ?, ?, ?, ?, 'user')");
        $stmt3->bind_param("sssi", $bank, $norek, $nama, $new_user_id);
        if (!$stmt3->execute()) {
            throw new Exception("Gagal menyimpan data bank.");
        }

        // 7. PROSES REFFERAL
        if (!empty($refferal)) {
            $stmt_reff = $koneksi->prepare("SELECT id FROM tb_user WHERE username = ?");
            $stmt_reff->bind_param("s", $refferal);
            $stmt_reff->execute();
            if ($stmt_reff->get_result()->num_rows > 0) {
                $stmt_ins_reff = $koneksi->prepare("INSERT INTO tb_refferal (user_refferal, keterangan, bonus, id_user) VALUES (?, 'Downline', 0, ?)");
                $stmt_ins_reff->bind_param("si", $refferal, $new_user_id);
                $stmt_ins_reff->execute();
            }
        }

        // JIKA SEMUA OK, COMMIT!
        $koneksi->commit();

        // 8. AUTO LOGIN
        $_SESSION['id']        = $new_user_id;
        $_SESSION['username']  = $username;
        $_SESSION['extplayer'] = $username;

        header("Location:../index.php?pesan=register_berhasil");
        exit;

    } catch (Exception $e) {
        $koneksi->rollback();
        die("Kesalahan: " . $e->getMessage());
    }

} else {
    die("Akses ditolak.");
}
?>