"use client" import { useState, useEffect } from "react" import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { Badge } from "@/components/ui/badge" import { Loader2, Plus, Trash2, Edit } from "lucide-react" export default function CouponsAdmin() { const [coupons, setCoupons] = useState([]) const [loading, setLoading] = useState(true) const [submitting, setSubmitting] = useState(false) const [newCoupon, setNewCoupon] = useState({ code: "", discount_percent: 10, max_discount_amount: 100, }) useEffect(() => { fetchCoupons() }, []) const fetchCoupons = async () => { try { const res = await fetch('/api/admin/coupons') const data = await res.json() setCoupons(data) } catch (e) { console.error(e) } finally { setLoading(false) } } const handleCreate = async () => { if (!newCoupon.code) return setSubmitting(true) try { await fetch('/api/admin/coupons', { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(newCoupon) }) setNewCoupon({ code: "", discount_percent: 10, max_discount_amount: 100 }) await fetchCoupons() } catch (e) { console.error(e) } finally { setSubmitting(false) } } const handleDelete = async (id: string) => { if (!confirm("Delete this coupon?")) return try { await fetch(`/api/admin/coupons/${id}`, { method: "DELETE" }) await fetchCoupons() } catch (e) { console.error(e) } } return (

Coupon Management

Create and manage discount codes for subscriptions.

Create Coupon Add a new promo code
setNewCoupon({...newCoupon, code: e.target.value.toUpperCase()})} />
setNewCoupon({...newCoupon, discount_percent: Number(e.target.value)})} />
setNewCoupon({...newCoupon, max_discount_amount: Number(e.target.value)})} />
Active Coupons {loading ? (
) : ( Code Discount Max Off Status Actions {coupons.length === 0 && ( No coupons found. )} {coupons.map(c => ( {c.code} {c.discount_percent}% ₹{c.max_discount_amount} {c.is_active ? Active : Inactive} ))}
)}
) }