"use client"; import { useState } from "react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { useTranslations } from "next-intl"; import { Plus } from "lucide-react"; import { apiGet, apiPost } from "@/lib/api/client"; import type { Coupon, CouponType } from "@/lib/api/types"; import { useAuthStore } from "@/lib/stores/auth.store"; import { formatNumber } from "@/lib/format"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { LabeledField } from "@/components/ui/labeled-field"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; export function CouponsScreen() { const t = useTranslations("coupons"); const tCommon = useTranslations("common"); const cafeId = useAuthStore((s) => s.user?.cafeId); const queryClient = useQueryClient(); const [showForm, setShowForm] = useState(false); const [code, setCode] = useState(""); const [type, setType] = useState("Percentage"); const [value, setValue] = useState("10"); const { data: coupons = [], isLoading } = useQuery({ queryKey: ["coupons", cafeId], queryFn: () => apiGet(`/api/cafes/${cafeId}/coupons`), enabled: !!cafeId, }); const createCoupon = useMutation({ mutationFn: () => apiPost(`/api/cafes/${cafeId}/coupons`, { code, type, value: Number(value), isActive: true, }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["coupons", cafeId] }); setShowForm(false); setCode(""); setValue("10"); }, }); if (!cafeId) return null; return (

{t("title")}

{showForm && ( setCode(e.target.value)} dir="ltr" className="text-end" /> setValue(e.target.value)} type="number" dir="ltr" className="text-end" />
)} {isLoading ? (

{tCommon("loading")}

) : coupons.length === 0 ? (

{t("noCoupons")}

) : (
{coupons.map((c) => (
{c.code} {c.isActive ? t("active") : t("inactive")}

{t("type")}: {t(`types.${c.type}`)}

{t("value")}: {formatNumber(c.value)} {c.type === "Percentage" ? "%" : " ت"}

{t("usage")}: {formatNumber(c.usedCount)} {c.usageLimit ? ` / ${formatNumber(c.usageLimit)}` : ""}

))}
)}
); }