import apiClient from './client' // Types export type CampaignBonusType = 'balance' | 'subscription' | 'none' | 'tariff' export interface TariffInfo { id: number name: string } export interface CampaignListItem { id: number name: string start_parameter: string bonus_type: CampaignBonusType is_active: boolean registrations_count: number total_revenue_kopeks: number conversion_rate: number created_at: string } export interface CampaignListResponse { campaigns: CampaignListItem[] total: number } export interface CampaignDetail { id: number name: string start_parameter: string bonus_type: CampaignBonusType is_active: boolean balance_bonus_kopeks: number balance_bonus_rubles: number subscription_duration_days: number | null subscription_traffic_gb: number | null subscription_device_limit: number | null subscription_squads: string[] tariff_id: number | null tariff_duration_days: number | null tariff: TariffInfo | null created_by: number | null created_at: string updated_at: string | null deep_link: string | null } export interface CampaignCreateRequest { name: string start_parameter: string bonus_type: CampaignBonusType is_active?: boolean balance_bonus_kopeks?: number subscription_duration_days?: number subscription_traffic_gb?: number subscription_device_limit?: number subscription_squads?: string[] tariff_id?: number tariff_duration_days?: number } export interface CampaignUpdateRequest { name?: string start_parameter?: string bonus_type?: CampaignBonusType is_active?: boolean balance_bonus_kopeks?: number subscription_duration_days?: number subscription_traffic_gb?: number subscription_device_limit?: number subscription_squads?: string[] tariff_id?: number tariff_duration_days?: number } export interface CampaignToggleResponse { id: number is_active: boolean message: string } export interface CampaignStatistics { id: number name: string start_parameter: string bonus_type: CampaignBonusType is_active: boolean registrations: number balance_issued_kopeks: number balance_issued_rubles: number subscription_issued: number last_registration: string | null total_revenue_kopeks: number total_revenue_rubles: number avg_revenue_per_user_kopeks: number avg_revenue_per_user_rubles: number avg_first_payment_kopeks: number avg_first_payment_rubles: number trial_users_count: number active_trials_count: number conversion_count: number paid_users_count: number conversion_rate: number trial_conversion_rate: number deep_link: string | null } export interface CampaignRegistrationItem { id: number user_id: number telegram_id: number username: string | null first_name: string | null bonus_type: string balance_bonus_kopeks: number subscription_duration_days: number | null tariff_id: number | null tariff_duration_days: number | null created_at: string user_balance_kopeks: number has_subscription: boolean has_paid: boolean } export interface CampaignRegistrationsResponse { registrations: CampaignRegistrationItem[] total: number page: number per_page: number } export interface CampaignsOverview { total: number active: number inactive: number total_registrations: number total_balance_issued_kopeks: number total_balance_issued_rubles: number total_subscription_issued: number total_tariff_issued: number } export interface ServerSquadInfo { id: number squad_uuid: string display_name: string country_code: string | null } export interface TariffListItem { id: number name: string description: string | null is_active: boolean traffic_limit_gb: number device_limit: number } export const campaignsApi = { // Get campaigns overview getOverview: async (): Promise => { const response = await apiClient.get('/cabinet/admin/campaigns/overview') return response.data }, // Get all campaigns getCampaigns: async (includeInactive = true, offset = 0, limit = 50): Promise => { const response = await apiClient.get('/cabinet/admin/campaigns', { params: { include_inactive: includeInactive, offset, limit } }) return response.data }, // Get single campaign getCampaign: async (campaignId: number): Promise => { const response = await apiClient.get(`/cabinet/admin/campaigns/${campaignId}`) return response.data }, // Get campaign statistics getCampaignStats: async (campaignId: number): Promise => { const response = await apiClient.get(`/cabinet/admin/campaigns/${campaignId}/stats`) return response.data }, // Get campaign registrations getCampaignRegistrations: async (campaignId: number, page = 1, perPage = 50): Promise => { const response = await apiClient.get(`/cabinet/admin/campaigns/${campaignId}/registrations`, { params: { page, per_page: perPage } }) return response.data }, // Create campaign createCampaign: async (data: CampaignCreateRequest): Promise => { const response = await apiClient.post('/cabinet/admin/campaigns', data) return response.data }, // Update campaign updateCampaign: async (campaignId: number, data: CampaignUpdateRequest): Promise => { const response = await apiClient.put(`/cabinet/admin/campaigns/${campaignId}`, data) return response.data }, // Delete campaign deleteCampaign: async (campaignId: number): Promise<{ message: string }> => { const response = await apiClient.delete(`/cabinet/admin/campaigns/${campaignId}`) return response.data }, // Toggle campaign active status toggleCampaign: async (campaignId: number): Promise => { const response = await apiClient.post(`/cabinet/admin/campaigns/${campaignId}/toggle`) return response.data }, // Get available servers for subscription bonus getAvailableServers: async (): Promise => { const response = await apiClient.get('/cabinet/admin/campaigns/available-servers') return response.data }, // Get available tariffs for tariff bonus getAvailableTariffs: async (): Promise => { const response = await apiClient.get('/cabinet/admin/campaigns/available-tariffs') return response.data }, }