import Stripe from 'stripe'; function getStripe(): Stripe | null { if (!process.env.STRIPE_SECRET_KEY) return null; return new Stripe(process.env.STRIPE_SECRET_KEY); } export async function createDonationCheckout(params: { amount: number; donorEmail?: string; petId?: number; petName?: string; successUrl: string; cancelUrl: string; }): Promise { const stripe = getStripe(); if (!stripe) return null; const session = await stripe.checkout.sessions.create({ payment_method_types: ['card'], mode: 'payment', customer_email: params.donorEmail, line_items: [{ price_data: { currency: 'usd', product_data: { name: params.petName ? `Donation for ${params.petName}` : 'Donation' }, unit_amount: params.amount }, quantity: 1 }], metadata: { type: 'donation', petId: params.petId?.toString() || '' }, success_url: params.successUrl, cancel_url: params.cancelUrl }); return session.url; } export async function createAdoptionFeeCheckout(params: { amount: number; petId: number; petName: string; adopterEmail: string; successUrl: string; cancelUrl: string; }): Promise { const stripe = getStripe(); if (!stripe) return null; const session = await stripe.checkout.sessions.create({ payment_method_types: ['card'], mode: 'payment', customer_email: params.adopterEmail, line_items: [{ price_data: { currency: 'usd', product_data: { name: `Adoption Fee — ${params.petName}` }, unit_amount: params.amount }, quantity: 1 }], metadata: { type: 'adoption_fee', petId: params.petId.toString() }, success_url: params.successUrl, cancel_url: params.cancelUrl }); return session.url; } export function constructWebhookEvent( body: string, signature: string ): Stripe.Event | null { const stripe = getStripe(); if (!stripe || !process.env.STRIPE_WEBHOOK_SECRET) return null; return stripe.webhooks.constructEvent( body, signature, process.env.STRIPE_WEBHOOK_SECRET ); }