<?php
$DB_HOST = 'localhost';
$DB_NAME = 'pnartli1_doorkar';
$DB_USER = 'pnartli1_doorkar';
$DB_PASS = 'V[B5S(1gO,OIqPvz';

$SEP_CLASSIC_SEND_TOKEN_URL = 'https://sep.shaparak.ir/OnlinePG/SendToken';
$SEP_CLASSIC_FORM_URL = 'https://sep.shaparak.ir/OnlinePG/OnlinePG';

function redirect_debug_log($title, $data = []) {
    if (isset($data['token'])) {
        $data['token'] = substr((string)$data['token'], 0, 6) . '***';
    }
    $line = '[' . date('Y-m-d H:i:s') . '] ' . $title . ' ' .
        json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . PHP_EOL;
    @file_put_contents(__DIR__ . '/sep_redirect_debug.log', $line, FILE_APPEND);
}

function table_column_exists(PDO $pdo, $table, $column) {
    try {
        $stmt = $pdo->prepare("SHOW COLUMNS FROM `$table` LIKE ?");
        $stmt->execute([$column]);
        return $stmt->fetchColumn() !== false;
    } catch (Throwable $e) {
        return false;
    }
}

try {
    $pdo = new PDO(
        "mysql:host={$DB_HOST};dbname={$DB_NAME};charset=utf8mb4",
        $DB_USER,
        $DB_PASS,
        [PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC]
    );
} catch (Throwable $e) {
    redirect_debug_log('db_error', ['error' => $e->getMessage()]);
    http_response_code(500);
    echo 'DB error';
    exit;
}

$paymentId = (int)($_GET['payment_id'] ?? 0);
if ($paymentId <= 0) {
    http_response_code(400);
    echo 'Invalid payment';
    exit;
}

$select = ['token', 'gateway_url', 'amount'];
if (table_column_exists($pdo, 'project_payments', 'payment_method')) $select[] = 'payment_method';
if (table_column_exists($pdo, 'project_payments', 'gateway_mode')) $select[] = 'gateway_mode';
$sql = 'SELECT ' . implode(', ', array_map(fn($c) => "`$c`", $select)) . " FROM project_payments WHERE id=? AND status IN ('token_created','redirected') LIMIT 1";
$stmt = $pdo->prepare($sql);
$stmt->execute([$paymentId]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);

if (!$row || trim((string)$row['token']) === '') {
    redirect_debug_log('payment_not_found', ['payment_id' => $paymentId]);
    http_response_code(404);
    echo 'Payment not found';
    exit;
}

$pdo->prepare("UPDATE project_payments SET status='redirected' WHERE id=? LIMIT 1")->execute([$paymentId]);

$tokenRaw = trim((string)$row['token']);
$gatewayRaw = trim((string)($row['gateway_url'] ?? ''));
$paymentMethod = trim((string)($row['payment_method'] ?? 'sep_direct'));
$gatewayMode = trim((string)($row['gateway_mode'] ?? ''));
$amount = (int)($row['amount'] ?? 0);

if ($gatewayRaw === '') $gatewayRaw = $SEP_CLASSIC_FORM_URL;
if ($gatewayMode === '') {
    $gatewayMode = ($paymentMethod === 'blu_bank' || stripos($gatewayRaw, 'neo-pg') !== false || stripos($gatewayRaw, '/transaction/init') !== false) ? 'neo' : 'direct';
}

redirect_debug_log('redirect_opened', [
    'payment_id' => $paymentId,
    'amount_toman' => $amount,
    'payment_method' => $paymentMethod,
    'gateway_mode' => $gatewayMode,
    'gateway_url' => $gatewayRaw,
    'token' => $tokenRaw,
]);

// پرداخت مستقیم: با SendToken کاربر مستقیم وارد صفحه کارت بانکی سپ می‌شود.
if ($gatewayMode !== 'neo' && $paymentMethod !== 'blu_bank') {
    $target = $SEP_CLASSIC_SEND_TOKEN_URL . '?token=' . rawurlencode($tokenRaw);
    $safeTarget = htmlspecialchars($target, ENT_QUOTES, 'UTF-8');
    ?><!doctype html>
<html lang="fa" dir="rtl">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>انتقال به درگاه</title>
</head>
<body style="font-family:tahoma;text-align:center;padding-top:50px;background:#f7f7f7">
    <p>در حال انتقال به درگاه پرداخت مستقیم...</p>
    <a href="<?= $safeTarget ?>">اگر منتقل نشدید، اینجا بزنید</a>
    <script>window.location.replace('<?= $safeTarget ?>');</script>
</body>
</html><?php
    exit;
}

// پرداخت بلو بانک / neo-pg:
// طبق مستند سپ، وقتی X-IPG-Url در پاسخ توکن برمی‌گردد، همان فرم قبلی باید با آدرس پایه جدید POST شود.
// برای neo-pg فقط Token ارسال می‌کنیم. ارسال token با حرف کوچک یا fallback GET ممکن است باعث خطای «پرداختی وجود ندارد» شود.
if ($gatewayRaw === '' || stripos($gatewayRaw, 'http') !== 0) {
    redirect_debug_log('neo_gateway_missing', ['payment_id' => $paymentId, 'gateway_url' => $gatewayRaw]);
    http_response_code(500);
    echo 'Blue gateway url is missing';
    exit;
}

$token = htmlspecialchars($tokenRaw, ENT_QUOTES, 'UTF-8');
$gatewayUrl = htmlspecialchars($gatewayRaw, ENT_QUOTES, 'UTF-8');
?><!doctype html>
<html lang="fa" dir="rtl">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>انتقال به پرداخت بلو بانک</title>
    <style>
        body{font-family:tahoma,arial;background:#f4f7f5;margin:0;padding:28px;color:#1e2621;text-align:center}
        .card{max-width:440px;margin:30px auto;background:#fff;border:1px solid #d9e9e0;border-radius:24px;padding:24px;box-shadow:0 12px 32px rgba(0,0,0,.08)}
        .badge{display:inline-block;background:#eaf4ff;border:1px solid #b8dbff;color:#1769aa;padding:7px 12px;border-radius:16px;font-weight:bold;font-size:12px}
        h2{font-size:18px;margin:16px 0 8px}
        p{font-size:13px;line-height:2;color:#66736b;margin:0}
        .warn{margin-top:14px;background:#fff8e7;border:1px solid #f2d08a;color:#8a5a00;border-radius:16px;padding:10px;font-size:12px;line-height:1.9}
        button{display:inline-block;margin-top:16px;border:0;background:#18a957;color:#fff;padding:13px 20px;border-radius:16px;text-decoration:none;font-weight:bold;font-size:13px;cursor:pointer}
    </style>
</head>
<body>
    <div class="card">
        <span class="badge">پرداخت با بلو بانک</span>
        <h2>در حال انتقال به بلوپی</h2>
        <p>چند لحظه صبر کنید. اگر انتقال خودکار انجام نشد، دکمه انتقال دستی را بزنید.</p>
        <?php if ($amount > 0 && $amount < 1000): ?>
            <div class="warn">مبلغ نهایی این پرداخت <?= htmlspecialchars(number_format($amount), ENT_QUOTES, 'UTF-8') ?> تومان است. برای پرداخت با بلو بانک بهتر است مبلغ نهایی حداقل ۱,۰۰۰ تومان باشد.</div>
        <?php endif; ?>

        <form id="sepForm" action="<?= $gatewayUrl ?>" method="post" accept-charset="UTF-8">
            <input type="hidden" name="Token" value="<?= $token ?>">
            <button type="submit">انتقال دستی به بلو بانک</button>
        </form>
    </div>

    <script>
        setTimeout(function(){
            document.getElementById('sepForm').submit();
        }, 500);
    </script>
</body>
</html>
