import { useState } from 'react' import { useMutation, useQueryClient } from '@tanstack/react-query' import { useTranslation } from 'react-i18next' import { toast } from '@/shared/ui/toast-store' import { Card, CardContent, CardHeader, CardTitle } from '@/shared/ui/card' import { Badge } from '@/shared/ui/badge' import { Button } from '@/shared/ui/button' import { Label } from '@/shared/ui/label' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/shared/ui/select' import { HttpError } from '@/shared/api/client' import type { BillingStatusDto, PaymentPeriod } from '@/shared/api/types' import { cancelPaymentRequest, createPaymentRequest, markPaymentSent, sendRequisitesToTelegram } from './api' const PERIODS: PaymentPeriod[] = ['Quarter', 'HalfYear', 'Year'] export function PaymentRequestPanel({ status }: { status: BillingStatusDto }) { const { t } = useTranslation() const queryClient = useQueryClient() const [period, setPeriod] = useState('Quarter') const invalidate = () => queryClient.invalidateQueries({ queryKey: ['my-billing-status'] }) const createMutation = useMutation({ mutationFn: () => createPaymentRequest(period), onSuccess: async () => { toast.success(t('billing.requestCreated')) await invalidate() }, onError: (error) => toast.error(error instanceof HttpError ? error.detail : t('auth.genericError')), }) const cancelMutation = useMutation({ mutationFn: (id: string) => cancelPaymentRequest(id), onSuccess: async () => { toast.success(t('billing.requestCancelled')) await invalidate() }, onError: (error) => toast.error(error instanceof HttpError ? error.detail : t('auth.genericError')), }) const markPaidMutation = useMutation({ mutationFn: (id: string) => markPaymentSent(id), onSuccess: async () => { toast.success(t('billing.markedPaid')) await invalidate() }, onError: (error) => toast.error(error instanceof HttpError ? error.detail : t('auth.genericError')), }) const sendToTelegramMutation = useMutation({ mutationFn: (id: string) => sendRequisitesToTelegram(id), onSuccess: () => toast.success(t('billing.requisitesSent')), onError: (error) => { const message = error instanceof HttpError && error.status === 409 ? t('billing.telegramNotLinked') : t('auth.genericError') toast.error(message) }, }) const request = status.activeRequest if (!request) { return ( {t('billing.newRequest')}
) } const isAwaitingConfirmation = request.status === 'AwaitingConfirmation' return ( {t('billing.activeRequest')} {t(`billing.requestStatus.${request.status}`)}

{t(`billing.periods.${request.period}`)} — {request.amountSnapshot} ₽

{!isAwaitingConfirmation && (

{status.requisitesText || t('billing.requisitesMissing')}

)}
{!isAwaitingConfirmation && ( <> )}
{isAwaitingConfirmation &&

{t('billing.awaitingAdminHint')}

}
) }