import {NextResponse} from "next/server";
import {supabaseAdmin} from "../../../../../lib/supabase-admin";
import {verifyNagorikPayWebhook,verifyNagorikPayPayment} from "../../../../../lib/nagorikpay";
export async function POST(req:Request){
 const raw=await req.text(); const ts=req.headers.get("X-NagorikPay-Timestamp")||""; const sig=req.headers.get("X-NagorikPay-Signature")||"";
 if(!verifyNagorikPayWebhook(raw,ts,sig))return new NextResponse("Invalid signature",{status:401});
 const payload=Object.fromEntries(new URLSearchParams(raw).entries()); const tx=payload.transactionId||payload.transaction_id; const status=(payload.status||"").toLowerCase();
 if(tx){
  const s=supabaseAdmin(); const {data:existing}=await s.from("orders").select("id,total_amount,payment_status").eq("payment_transaction_id",tx).maybeSingle();
  let order=existing;
  if(!order && payload.metadata){try{const m=JSON.parse(payload.metadata); if(m.order_id){order=(await s.from("orders").select("id,total_amount,payment_status").eq("id",m.order_id).maybeSingle()).data;}}catch{}}
  if(order && (status==="completed"||status==="paid")){try{const v=await verifyNagorikPayPayment(tx); const vs=String(v?.status||v?.data?.status||"").toLowerCase(); const amount=Number(v?.paymentAmount??v?.amount??v?.pay_amount??v?.data?.paymentAmount??v?.data?.amount); if((vs==="completed"||vs==="paid"||vs==="success"||vs==="valid")&&Math.abs(amount-Number(order.total_amount))<0.01) await s.from("orders").update({payment_status:"paid",status:"paid",payment_transaction_id:tx}).eq("id",order.id);}catch{} }
  if(order && status==="failed") await s.from("orders").update({payment_status:"failed",status:"cancelled",payment_transaction_id:tx}).eq("id",order.id);
 }
 return new NextResponse("OK",{status:200});
}
