import apiClient from './client'; export interface PromoOffer { id: number; notification_type: string; discount_percent: number | null; effect_type: string; expires_at: string; is_active: boolean; is_claimed: boolean; claimed_at: string | null; // eslint-disable-next-line @typescript-eslint/no-explicit-any extra_data: Record | null; } export interface ActiveDiscount { discount_percent: number; source: string | null; expires_at: string | null; is_active: boolean; } export interface PromoGroupDiscounts { group_name: string | null; server_discount_percent: number; traffic_discount_percent: number; device_discount_percent: number; period_discounts: Record; } export interface ClaimOfferResponse { success: boolean; message: string; discount_percent: number | null; expires_at: string | null; } export interface DeactivateDiscountResponse { success: boolean; } export interface LoyaltyTierInfo { id: number; name: string; threshold_rubles: number; server_discount_percent: number; traffic_discount_percent: number; device_discount_percent: number; period_discounts: Record; is_current: boolean; is_achieved: boolean; } export interface LoyaltyTiersResponse { tiers: LoyaltyTierInfo[]; current_spent_rubles: number; current_tier_name: string | null; next_tier_name: string | null; next_tier_threshold_rubles: number | null; progress_percent: number; } export const promoApi = { // Get available promo offers getOffers: async (): Promise => { const response = await apiClient.get('/cabinet/promo/offers'); return response.data; }, // Get active discount getActiveDiscount: async (): Promise => { const response = await apiClient.get('/cabinet/promo/active-discount'); return response.data; }, // Get promo group discounts getGroupDiscounts: async (): Promise => { const response = await apiClient.get('/cabinet/promo/group-discounts'); return response.data; }, // Get loyalty tiers (promo groups with spending thresholds) getLoyaltyTiers: async (): Promise => { const response = await apiClient.get('/cabinet/promo/loyalty-tiers'); return response.data; }, // Claim a promo offer claimOffer: async (offerId: number): Promise => { const response = await apiClient.post('/cabinet/promo/claim', { offer_id: offerId, }); return response.data; }, // Clear active discount clearActiveDiscount: async (): Promise<{ message: string }> => { const response = await apiClient.delete<{ message: string }>('/cabinet/promo/active-discount'); return response.data; }, // Deactivate current active promo discount deactivateDiscount: async (): Promise => { const response = await apiClient.post( '/cabinet/promocode/deactivate-discount', ); return response.data; }, };