import { httpClient } from '../../../core/infrastructure/httpClient';
import type { User, UserPresence } from '../../../core/domain/types';

export class UserApi {
  static async searchUsers(query: string) {
    // Конечная точка в новом бэкенде: GET /api/profiles/search?q=...
    return httpClient.request<UserPresence[]>(`/profiles/search?q=${encodeURIComponent(query)}`);
  }

  static async getUser(id: string) {
    // Конечная точка в новом бэкенде: GET /api/profiles/{id}
    return httpClient.request<User>(`/profiles/${id}`);
  }

  static async updateProfile(data: { displayName?: string; bio?: string; birthday?: string | null }) {
    // Конечная точка в новом бэкенде: PUT /api/profiles/profile
    return httpClient.request<User>('/profiles/profile', {
      method: 'PUT',
      body: JSON.stringify(data),
    });
  }

  static async updateSettings(settings: any) {
    // Конечная точка в новом бэкенде: PUT /api/profiles/settings
    return httpClient.request('/profiles/settings', {
      method: 'PUT',
      body: JSON.stringify(settings),
    });
  }

  static async uploadAvatar(file: File) {
    // Конечная точка в новом бэкенде: POST /api/profiles/avatar
    const formData = new FormData();
    formData.append('avatar', file);
    return httpClient.request<User>('/profiles/avatar', {
      method: 'POST',
      body: formData,
      timeout: 120_000, // Аватар может быть большим, даем время на обработку
    });
  }

  static async cropAvatar(file: File, cropData: { x: number; y: number; width: number; height: number; sw: number; sh: number }) {
    // Конечная точка в новом бэкенде: POST /api/profiles/avatar/crop
    const formData = new FormData();
    formData.append('avatar', file);
    formData.append('x', cropData.x.toString());
    formData.append('y', cropData.y.toString());
    formData.append('width', cropData.width.toString());
    formData.append('height', cropData.height.toString());
    formData.append('sw', cropData.sw.toString());
    formData.append('sh', cropData.sh.toString());

    return httpClient.request<User>('/profiles/avatar/crop', {
      method: 'POST',
      body: formData,
      timeout: 120_000,
    });
  }

  static async removeAvatar() {
    // Конечная точка в новом бэкенде: DELETE /api/profiles/avatar
    return httpClient.request<User>('/profiles/avatar', { method: 'DELETE' });
  }

  static async getIceServers() {
    // Конфигурация WebRTC теперь возвращается через эндпоинт админки или настроек, 
    // но если бэк не меняли в этой части, оставляем старый путь.
    return httpClient.request<{ iceServers: RTCIceServer[] }>('/webrtc/ice-servers');
  }
}
