import apiClient from './client'; // Types export interface PromoGroupInfo { id: number; name: string; is_selected: boolean; } export interface ServerListItem { id: number; squad_uuid: string; display_name: string; original_name: string | null; country_code: string | null; is_available: boolean; is_trial_eligible: boolean; price_kopeks: number; price_rubles: number; max_users: number | null; current_users: number; sort_order: number; is_full: boolean; availability_status: string; created_at: string; } export interface ServerListResponse { servers: ServerListItem[]; total: number; } export interface ServerDetail { id: number; squad_uuid: string; display_name: string; original_name: string | null; country_code: string | null; description: string | null; is_available: boolean; is_trial_eligible: boolean; price_kopeks: number; price_rubles: number; max_users: number | null; current_users: number; sort_order: number; is_full: boolean; availability_status: string; promo_groups: PromoGroupInfo[]; active_subscriptions: number; tariffs_using: string[]; created_at: string; updated_at: string | null; } export interface ServerUpdateRequest { display_name?: string; description?: string; country_code?: string; is_available?: boolean; is_trial_eligible?: boolean; price_kopeks?: number; max_users?: number; sort_order?: number; promo_group_ids?: number[]; } export interface ServerToggleResponse { id: number; is_available: boolean; message: string; } export interface ServerTrialToggleResponse { id: number; is_trial_eligible: boolean; message: string; } export interface ServerStats { id: number; display_name: string; squad_uuid: string; current_users: number; max_users: number | null; active_subscriptions: number; trial_subscriptions: number; usage_percent: number | null; } export interface ServerSyncResponse { created: number; updated: number; removed: number; message: string; } export const serversApi = { // Get all servers getServers: async (includeUnavailable = true): Promise => { const response = await apiClient.get('/cabinet/admin/servers', { params: { include_unavailable: includeUnavailable }, }); return response.data; }, // Get single server getServer: async (serverId: number): Promise => { const response = await apiClient.get(`/cabinet/admin/servers/${serverId}`); return response.data; }, // Update server updateServer: async (serverId: number, data: ServerUpdateRequest): Promise => { const response = await apiClient.put(`/cabinet/admin/servers/${serverId}`, data); return response.data; }, // Toggle server availability toggleServer: async (serverId: number): Promise => { const response = await apiClient.post(`/cabinet/admin/servers/${serverId}/toggle`); return response.data; }, // Toggle trial eligibility toggleTrial: async (serverId: number): Promise => { const response = await apiClient.post(`/cabinet/admin/servers/${serverId}/trial`); return response.data; }, // Get server stats getServerStats: async (serverId: number): Promise => { const response = await apiClient.get(`/cabinet/admin/servers/${serverId}/stats`); return response.data; }, // Sync servers with Remnawave syncServers: async (): Promise => { const response = await apiClient.post('/cabinet/admin/servers/sync'); return response.data; }, };