<?php
/**
 * صفحه پرداخت آنلاین مانده گزارش خدمات
 * /acc-engine/service-pay.php?token=...
 */
declare(strict_types=1);

define( 'ABSPATH', __DIR__ . '/' );
define( 'ACC_PATH', __DIR__ . '/' );
define( 'ACC_URL', '/acc-engine/' );

if ( ! function_exists( 'esc_html' ) ) {
    function esc_html( $text ) {
        return htmlspecialchars( (string) $text, ENT_QUOTES, 'UTF-8' );
    }
}

require_once __DIR__ . '/standalone/config.php';

$token  = trim( $_GET['token'] ?? '' );
$result = trim( $_GET['result'] ?? '' );
$ref    = trim( $_GET['ref'] ?? '' );
$reason = trim( $_GET['reason'] ?? '' );

$api_base = rtrim( ACC_URL, '/' ) . '/api.php/acc/v1';

?>
<!DOCTYPE html>
<html dir="rtl" lang="fa">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
    <meta name="theme-color" content="#1e40af">
    <title>پرداخت گزارش خدمات</title>
    <style>
        * { box-sizing: border-box; }
        body {
            margin: 0; min-height: 100dvh; font-family: Tahoma, sans-serif;
            background: linear-gradient(160deg, #eff6ff 0%, #f8fafc 60%);
            display: flex; align-items: center; justify-content: center; padding: 20px;
        }
        .card {
            width: 100%; max-width: 420px; background: #fff; border-radius: 16px;
            box-shadow: 0 8px 32px rgba(30,64,175,.12); padding: 28px 24px;
        }
        h1 { margin: 0 0 8px; font-size: 20px; color: #1e293b; }
        .sub { color: #64748b; font-size: 13px; margin-bottom: 20px; }
        .amount {
            font-size: 28px; font-weight: 800; color: #1d4ed8;
            text-align: center; margin: 16px 0;
        }
        .btn {
            width: 100%; border: none; border-radius: 12px; padding: 14px;
            font-size: 16px; font-weight: 700; cursor: pointer;
            background: #1d4ed8; color: #fff;
        }
        .btn:disabled { opacity: .6; cursor: wait; }
        .msg { padding: 14px; border-radius: 10px; font-size: 14px; margin-bottom: 16px; }
        .msg--ok { background: #dcfce7; color: #166534; }
        .msg--err { background: #fee2e2; color: #991b1b; }
        .msg--info { background: #eff6ff; color: #1e40af; }
        .hint { font-size: 12px; color: #94a3b8; text-align: center; margin-top: 16px; }
    </style>
</head>
<body>
<div class="card" id="app">
    <div class="acc-loading" style="text-align:center;color:#64748b;">⏳ در حال بارگذاری...</div>
</div>
<script>
const API = <?= json_encode( $api_base, JSON_UNESCAPED_UNICODE ) ?>;
const TOKEN = <?= json_encode( $token, JSON_UNESCAPED_UNICODE ) ?>;
const RESULT = <?= json_encode( $result, JSON_UNESCAPED_UNICODE ) ?>;
const REF = <?= json_encode( $ref, JSON_UNESCAPED_UNICODE ) ?>;
const REASON = <?= json_encode( $reason, JSON_UNESCAPED_UNICODE ) ?>;

const app = document.getElementById('app');

function esc(s) {
    const d = document.createElement('div');
    d.textContent = s ?? '';
    return d.innerHTML;
}

function fmt(n) {
    return Number(n || 0).toLocaleString('fa-IR');
}

function showResult() {
    if (RESULT === 'success') {
        app.innerHTML = `
            <h1>✅ پرداخت موفق</h1>
            <div class="msg msg--ok">پرداخت شما با موفقیت انجام شد.${REF ? '<br>کد پیگیری: <b dir="ltr">' + esc(REF) + '</b>' : ''}</div>
            <p class="hint">می‌توانید این صفحه را ببندید.</p>`;
        return true;
    }
    if (RESULT === 'fail') {
        const msgs = { cancelled: 'پرداخت لغو شد.', verify: 'تأیید پرداخت ناموفق بود.', notfound: 'تراکنش یافت نشد.' };
        app.innerHTML = `
            <h1>❌ پرداخت ناموفق</h1>
            <div class="msg msg--err">${esc(msgs[REASON] || 'خطا در پرداخت')}</div>
            <button class="btn" onclick="location.href=location.pathname+'?token='+encodeURIComponent(TOKEN)">تلاش مجدد</button>`;
        return true;
    }
    return false;
}

async function loadPayPage() {
    if (showResult()) return;
    if (!TOKEN || !/^[a-f0-9]{32}$/i.test(TOKEN)) {
        app.innerHTML = `<h1>گزارش یافت نشد</h1><div class="msg msg--err">لینک پرداخت نامعتبر است.</div>`;
        return;
    }
    try {
        const r = await fetch(API + '/service/public/report/' + encodeURIComponent(TOKEN));
        const res = await r.json();
        if (!res.success || !res.data) throw new Error(res.message || 'گزارش یافت نشد');
        const d = res.data;
        const balance = Number(d.balance || 0);
        if (balance <= 0) {
            app.innerHTML = `
                <h1>✅ تسویه شده</h1>
                <div class="msg msg--ok">بدهی‌ای برای گزارش <b>${esc(d.report_no)}</b> باقی نمانده است.</div>`;
            return;
        }
        app.innerHTML = `
            <h1>💳 پرداخت آنلاین</h1>
            <p class="sub">گزارش: <b>${esc(d.report_no)}</b> · ${esc(d.customer_name || '')}</p>
            <div class="msg msg--info">مانده بدهی</div>
            <div class="amount">${fmt(balance)} <small style="font-size:14px;">تومان</small></div>
            <button class="btn" id="payBtn">پرداخت با زرین‌پال</button>
            <p class="hint">پس از پرداخت به این صفحه بازمی‌گردید.</p>`;
        document.getElementById('payBtn').addEventListener('click', startPay);
    } catch (e) {
        app.innerHTML = `<h1>خطا</h1><div class="msg msg--err">${esc(e.message)}</div>`;
    }
}

async function startPay() {
    const btn = document.getElementById('payBtn');
    btn.disabled = true;
    btn.textContent = 'در حال اتصال به درگاه...';
    try {
        const r = await fetch(API + '/service/public/pay', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({ token: TOKEN }),
        });
        const res = await r.json();
        if (!res.success || !res.data?.payment_url) throw new Error(res.message || 'خطای درگاه');
        location.href = res.data.payment_url;
    } catch (e) {
        btn.disabled = false;
        btn.textContent = 'پرداخت با زرین‌پال';
        alert(e.message);
    }
}

loadPayPage();
</script>
</body>
</html>
