import {NextResponse} from "next/server";
import {supabaseAdmin} from "../../../../../lib/supabase-admin";
import {verifyNagorikPayPayment} from "../../../../../lib/nagorikpay";
export async function GET(req:Request){
 const u=new URL(req.url); const tx=u.searchParams.get("transactionId")||u.searchParams.get("transaction_id");
 const orderId=u.searchParams.get("order_id") || (()=>{try{return JSON.parse(u.searchParams.get("metadata")||"{}").order_id||null}catch{return null}})();
 if(!tx)return NextResponse.redirect(new URL("/payment/failed",u));
 const s= supabaseAdmin();
 let q=s.from("orders").select("id,user_id,total_amount,payment_status").eq("payment_transaction_id",tx).maybeSingle();
 let {data:o}=await q;
 if(!o && orderId){ const r=await s.from("orders").select("id,user_id,total_amount,payment_status").eq("id",orderId).maybeSingle(); o=r.data; }
 try{
   const v=await verifyNagorikPayPayment(tx);
   const status=String(v?.status||v?.data?.status||"").toLowerCase();
   const paid=status==="completed"||status==="paid"||status==="success"||status==="valid";
   const amount=Number(v?.paymentAmount ?? v?.amount ?? v?.pay_amount ?? v?.data?.paymentAmount ?? v?.data?.amount);
   if(o && paid && Number.isFinite(amount) && Math.abs(amount-Number(o.total_amount))<0.01){
     await s.from("orders").update({payment_status:"paid",status:"paid",payment_transaction_id:tx}).eq("id",o.id);
     return NextResponse.redirect(new URL(`/payment/success?order_id=${o.id}`,u));
   }
 }catch{}
 return NextResponse.redirect(new URL(`/payment/failed${o?`?order_id=${o.id}`:""}`,u));
}
