<?php
require_once 'manual_crypto_lib.php';
require_once 'plisio_lib.php';
header('Content-Type: application/json; charset=utf-8');
function crypto_wallet_json($data, int $code=200){ http_response_code($code); echo json_encode($data, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES); exit; }
try {
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') crypto_wallet_json(['ok'=>false,'error'=>'POST required']);
    $input = json_decode(file_get_contents('php://input'), true); if (!is_array($input) || !$input) $input = $_POST;
    $userId=(int)($input['user_id'] ?? 0); $amount=(int)preg_replace('/\D+/', '', (string)($input['amount'] ?? 0));
    if (!$userId) crypto_wallet_json(['ok'=>false,'error'=>'user_id required']);
    manual_crypto_blocked_guard($userId);
    $min=(int)getSetting('min_wallet_topup_amount','10000'); if($amount<$min) crypto_wallet_json(['ok'=>false,'error'=>'حداقل مبلغ واریز '.number_format($min).' تومان است']);
    $plisioError = '';
    if (function_exists('plisio_enabled') && plisio_enabled()) {
        try {
        $pdo->beginTransaction();
        $desc='شارژ حساب کاربری با Plisio - در انتظار پرداخت';
        $st=$pdo->prepare("INSERT INTO wallet_transactions(user_id,amount,type,status,payment_method,currency,description) VALUES(?,?,'DEPOSIT','PENDING','crypto','IRT',?)");
        $st->execute([$userId,$amount,$desc]); $txId=(int)$pdo->lastInsertId();
        $raw=json_encode(['source'=>'mini_app_plisio_wallet','amount'=>$amount], JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
        $cp=$pdo->prepare("INSERT INTO crypto_payments(user_id,wallet_transaction_id,amount,currency,provider,payment_type,status,raw_request) VALUES(?,?,?,?,?,?,?,?)");
        $cp->execute([$userId,$txId,$amount,'IRT','Plisio','wallet_topup','PENDING',$raw]);
        $cryptoId=(int)$pdo->lastInsertId(); $pdo->prepare("UPDATE wallet_transactions SET crypto_payment_id=? WHERE id=?")->execute([$cryptoId,$txId]);
        $invoice=plisio_create_invoice('WALLET-'.$txId, 'GEM ACC wallet topup #'.$txId, $amount, 'wallet_topup');
        $pdo->prepare("UPDATE crypto_payments SET provider_invoice_id=?, provider_order_id=?, payment_url=?, crypto_currency=?, raw_response=? WHERE id=?")->execute([$invoice['txn_id'],$invoice['txn_id'],$invoice['invoice_url'],$invoice['currency'],json_encode($invoice['raw'], JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES),$cryptoId]);
        $pdo->commit();
        crypto_wallet_json(['ok'=>true,'provider'=>'Plisio','payment_url'=>$invoice['invoice_url'],'transaction_id'=>$txId,'crypto_payment_id'=>$cryptoId]);
        } catch (Throwable $e) {
            if (isset($pdo) && $pdo->inTransaction()) $pdo->rollBack();
            $plisioError = $e->getMessage();
            error_log('[plisio_wallet_deposit_fallback] '.$plisioError);
        }
    }
    $cfg=manual_crypto_require_enabled();
    $receiptText=trim((string)($input['receipt_text'] ?? '')); $hasFile=isset($_FILES['receipt']) && $_FILES['receipt']['error']===UPLOAD_ERR_OK;
    if($receiptText==='' && !$hasFile){ crypto_wallet_json(['ok'=>true,'await_receipt'=>true,'message'=>'آدرس‌های پرداخت آماده است. بعد از پرداخت، رسید را ارسال کنید.','amount'=>$amount,'wallets'=>['usdt'=>['address'=>$cfg['usdt_address'],'network'=>$cfg['usdt_network']], 'trx'=>['address'=>$cfg['trx_address'],'network'=>$cfg['trx_network']]], 'instructions'=>$cfg['help'], 'quote'=>manual_crypto_quote($amount),'plisio_error'=>$plisioError]); }
    $receiptFile=manual_crypto_upload_receipt($userId,'crypto_deposit');
    if($receiptText==='' && !$receiptFile) crypto_wallet_json(['ok'=>false,'error'=>'عکس رسید یا هش/TxID تراکنش الزامی است']);
    $pdo->beginTransaction();
    $desc='شارژ حساب کاربری با ارز دیجیتال - در انتظار تایید';
    $st=$pdo->prepare("INSERT INTO wallet_transactions(user_id,amount,type,status,payment_method,currency,description,receipt_file_id,receipt_text) VALUES(?,?,'DEPOSIT','PENDING','crypto','IRT',?,?,?)");
    $st->execute([$userId,$amount,$desc,$receiptFile,$receiptText]); $txId=(int)$pdo->lastInsertId();
    $raw=json_encode(['wallets'=>['usdt'=>$cfg['usdt_address'],'trx'=>$cfg['trx_address']], 'receipt_text'=>$receiptText], JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
    $cp=$pdo->prepare("INSERT INTO crypto_payments(user_id,wallet_transaction_id,amount,currency,crypto_currency,network,wallet_address,provider,payment_type,status,receipt_file_id,receipt_text,raw_request) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)");
    $cp->execute([$userId,$txId,$amount,'IRT','USDT/TRX','TRON',($cfg['usdt_address'] ?: $cfg['trx_address']),'ManualCrypto','wallet_topup','PENDING',$receiptFile,$receiptText,$raw]);
    $cryptoId=(int)$pdo->lastInsertId(); $pdo->prepare("UPDATE wallet_transactions SET crypto_payment_id=? WHERE id=?")->execute([$cryptoId,$txId]); $pdo->commit();
    $adminMsg="🪙 رسید شارژ ارز دیجیتال جدید\n\n👤 کاربر: {$userId}\n💰 مبلغ: ".money($amount)."\n🆔 تراکنش: #{$txId}\n"; if($receiptText!=='') $adminMsg.="\n📝 رسید/TxID:\n{$receiptText}\n";
    $buttons=['inline_keyboard'=>[[['text'=>'✅ تأیید واریز','callback_data'=>"ADMIN_APPROVE_DEPOSIT__{$txId}"], ['text'=>'❌ رد واریز','callback_data'=>"ADMIN_REJECT_DEPOSIT__{$txId}"]]]];
    manual_crypto_notify_admins($adminMsg,$buttons,$receiptFile);
    tg('sendMessage',['chat_id'=>$userId,'text'=>"✅ رسید شارژ کریپتو #{$txId} ثبت شد و بعد از تایید ادمین موجودی اضافه می‌شود."]);
    crypto_wallet_json(['ok'=>true,'message'=>'رسید ارز دیجیتال ثبت شد و منتظر تأیید ادمین است.','transaction_id'=>$txId,'crypto_payment_id'=>$cryptoId]);
} catch(Throwable $e){ if(isset($pdo)&&$pdo->inTransaction()) $pdo->rollBack(); error_log('[manual_wallet_deposit_crypto] '.$e->getMessage()); crypto_wallet_json(['ok'=>false,'error'=>$e->getMessage()]); }
