import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { api } from '../lib/api'; import type { ApiResponse } from '../lib/api'; /** * روش‌های پرداختِ کلینیک (حساب بانکی + کارت‌خوان) برای صفحهٔ «مدیریت پرداخت». * منبع: /api/v1/my/payment-methods/... — این رکوردها بعداً از فاکتور مراجعه‌کننده * برای ثبت روش پرداختِ یک سرویس ارجاع داده می‌شوند. */ export interface BankAccount { uuid: string; bank_name: string; card_number: string | null; account_number: string; shaba_number: string | null; is_active: boolean; created_at: number; } export interface Pos { uuid: string; bank_name: string; serial_number: string | null; terminal_number: string; account_number: string | null; is_active: boolean; created_at: number; } export interface BankAccountInput { bank_name: string; account_number: string; card_number?: string; shaba_number?: string; } export interface PosInput { bank_name: string; terminal_number: string; serial_number?: string; account_number?: string; } const BANK_KEY = ['payment-methods', 'bank-accounts'] as const; const POS_KEY = ['payment-methods', 'pos'] as const; // ── Bank accounts ──────────────────────────────────────────────────────────── export function useBankAccounts() { return useQuery>({ queryKey: BANK_KEY, queryFn: () => api.get('/api/v1/my/payment-methods/bank-accounts'), }); } export function useCreateBankAccount() { const qc = useQueryClient(); return useMutation, unknown, BankAccountInput>({ mutationFn: (body) => api.post('/api/v1/my/payment-methods/bank-accounts', body), onSuccess: () => qc.invalidateQueries({ queryKey: BANK_KEY }), }); } export function useUpdateBankAccount() { const qc = useQueryClient(); return useMutation, unknown, { uuid: string; body: BankAccountInput }>({ mutationFn: ({ uuid, body }) => api.put(`/api/v1/my/payment-methods/bank-accounts/${uuid}`, body), onSuccess: () => qc.invalidateQueries({ queryKey: BANK_KEY }), }); } export function useToggleBankAccountStatus() { const qc = useQueryClient(); return useMutation, unknown, string>({ mutationFn: (uuid) => api.patch(`/api/v1/my/payment-methods/bank-accounts/${uuid}/status`, {}), onSuccess: () => qc.invalidateQueries({ queryKey: BANK_KEY }), }); } // ── POS devices ────────────────────────────────────────────────────────────── export function usePosDevices() { return useQuery>({ queryKey: POS_KEY, queryFn: () => api.get('/api/v1/my/payment-methods/pos'), }); } export function useCreatePos() { const qc = useQueryClient(); return useMutation, unknown, PosInput>({ mutationFn: (body) => api.post('/api/v1/my/payment-methods/pos', body), onSuccess: () => qc.invalidateQueries({ queryKey: POS_KEY }), }); } export function useUpdatePos() { const qc = useQueryClient(); return useMutation, unknown, { uuid: string; body: PosInput }>({ mutationFn: ({ uuid, body }) => api.put(`/api/v1/my/payment-methods/pos/${uuid}`, body), onSuccess: () => qc.invalidateQueries({ queryKey: POS_KEY }), }); } export function useTogglePosStatus() { const qc = useQueryClient(); return useMutation, unknown, string>({ mutationFn: (uuid) => api.patch(`/api/v1/my/payment-methods/pos/${uuid}/status`, {}), onSuccess: () => qc.invalidateQueries({ queryKey: POS_KEY }), }); }