import {activeCustomerSession,authBody,authFailure,AuthError} from '@/lib/customer-auth';
import {json} from '@/lib/server';
import {coinWithdrawalInput} from '@/lib/coin-withdrawal';
import {fundingReviewView} from '@/lib/funding-review';
import {fundingAmount,fundingError} from '@/lib/wallet-funding';
import {fundingRpc} from '@/lib/wallet-funding-server';
import {validateDepositAddress} from '@/lib/usdt-chain';

export async function POST(request:Request){try{
 const body=await authBody(request),{token}=await activeCustomerSession(request);let input;
 try{input=coinWithdrawalInput(body)}catch(error){const [message,status]=fundingError((error as Error).message);throw new AuthError(message,status)}
 if(!await validateDepositAddress(input.p_network,input.p_address))throw new AuthError('آدرس والت مقصد معتبر نیست. شبکه و آدرس را بررسی کنید.',400);
 const view=fundingReviewView(await fundingRpc('marketplace_crypto_withdrawal_request',input,token));
 if(view.kind!=='withdrawal'||view.direction!=='withdrawal'||view.currency!=='USDT'||view.test_mode||!view.manual_required||view.execution_status==='credited'||fundingAmount(view.amount,6,'100000')!==input.p_amount_micro)throw new AuthError('پاسخ درخواست برداشت معتبر نیست؛ همان درخواست را دوباره بررسی کنید.',502);
 return json(view);
}catch(error){return authFailure(error)}}
