<?php
require __DIR__ . '/app/bootstrap.php';

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    header('Location: index.php');
    exit;
}

$id = trim((string) ($_POST['order'] ?? ''));
$token = trim((string) ($_POST['token'] ?? ''));
$backUrl = 'payment.php?order=' . rawurlencode($id) . '&token=' . rawurlencode($token);
$order = authorized_order($id, $token);

if (!$order || !verify_csrf($_POST['csrf_token'] ?? null)) {
    $_SESSION['receipt_error'] = 'Sipariş doğrulanamadı. Lütfen sayfayı yenileyip tekrar deneyin.';
    header('Location: ' . $backUrl);
    exit;
}

$file = $_FILES['receipt'] ?? null;
if (!$file || ($file['error'] ?? UPLOAD_ERR_NO_FILE) !== UPLOAD_ERR_OK) {
    $_SESSION['receipt_error'] = 'Dekont yüklenemedi. Lütfen dosyayı tekrar seçin.';
    header('Location: ' . $backUrl);
    exit;
}

$maxBytes = (int) cfg('orders.max_receipt_mb', 8) * 1024 * 1024;
if (($file['size'] ?? 0) <= 0 || $file['size'] > $maxBytes) {
    $_SESSION['receipt_error'] = 'Dosya boyutu izin verilen sınırı aşıyor.';
    header('Location: ' . $backUrl);
    exit;
}

$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->file($file['tmp_name']);
$allowed = cfg('orders.allowed_receipt_types', []);
if (!in_array($mime, $allowed, true)) {
    $_SESSION['receipt_error'] = 'Yalnızca JPG, PNG, WebP veya PDF dekont yükleyebilirsiniz.';
    header('Location: ' . $backUrl);
    exit;
}

$extensions = ['image/jpeg' => 'jpg', 'image/png' => 'png', 'image/webp' => 'webp', 'application/pdf' => 'pdf'];
$extension = $extensions[$mime] ?? 'bin';
$directory = storage_path('receipts');
if (!is_dir($directory) && !mkdir($directory, 0750, true) && !is_dir($directory)) {
    $_SESSION['receipt_error'] = 'Dekont saklama alanı hazırlanamadı. WhatsApp seçeneğini kullanabilirsiniz.';
    header('Location: ' . $backUrl);
    exit;
}

$fileName = $order['id'] . '-' . bin2hex(random_bytes(5)) . '.' . $extension;
$destination = $directory . '/' . $fileName;
if (!move_uploaded_file($file['tmp_name'], $destination)) {
    $_SESSION['receipt_error'] = 'Dekont kaydedilemedi. Lütfen tekrar deneyin.';
    header('Location: ' . $backUrl);
    exit;
}
chmod($destination, 0640);

$order['status'] = 'Dekont Kontrolü Bekleniyor';
$order['updated_at'] = date(DATE_ATOM);
$order['payment']['receipt'] = $fileName;
$order['payment']['receipt_mime'] = $mime;
$order['payment']['receipt_uploaded_at'] = date(DATE_ATOM);
$order['notifications']['receipt_telegram'] = notify_receipt($order, $destination);
save_order($order);

header('Location: success.php?order=' . rawurlencode($id) . '&token=' . rawurlencode($token));
exit;
