import {activeCustomerSession,authFailure} from '@/lib/customer-auth';
import {json,readJson,sameOrigin} from '@/lib/server';
import {WalletAddressError,walletAddressConfig,provisionWalletAddress} from '@/lib/wallet-address-server';

export async function GET(request:Request){
 try{
  await activeCustomerSession(request);
  const config=walletAddressConfig();
  return json({enabled:!!config,network:config?.network||null,chainId:config?.chainId||null});
 }catch(error){return authFailure(error)}
}

export async function POST(request:Request){
 if(!sameOrigin(request)||request.headers.get('sec-fetch-site')==='cross-site')return json({error:'invalid_request'},403);
 if(!request.headers.get('content-type')?.includes('application/json'))return json({error:'invalid_request'},415);
 try{
  const {userId}=await activeCustomerSession(request);
  let body:unknown;try{body=await readJson(request,1000)}catch{return json({error:'invalid_request'},400)}
  if(!body||typeof body!=='object'||Array.isArray(body)||(body as {action?:unknown}).action!=='create'||Object.keys(body).some(k=>k!=='action'))return json({error:'invalid_request'},400);
  const config=walletAddressConfig();
  if(!config)return json({error:'wallet_address_not_configured'},503);
  const wallet=await provisionWalletAddress(userId,config);
  return json({wallet});
 }catch(error){return error instanceof WalletAddressError?json({error:error.code},error.status):authFailure(error)}
}
