import api from './api';

// Типы данных
export interface Address {
  id: number;
  user_id: number;
  type: string;
  address: string;
  city: string;
  postal_code: string;
  country: string;
  is_default: boolean;
}

export interface User {
  id: number;
  email: string;
  first_name: string;
  last_name: string;
  phone?: string;
  is_active: boolean;
  is_admin: boolean;
  created_at: string;
  addresses?: Address[];
}

export interface UserUpdate {
  first_name?: string;
  last_name?: string;
  phone?: string;
  password?: string;
  email?: string;
}

export interface AddressCreate {
  type: string;
  address: string;
  city: string;
  postal_code: string;
  country: string;
  is_default?: boolean;
}

export interface AddressUpdate {
  type?: string;
  address?: string;
  city?: string;
  postal_code?: string;
  country?: string;
  is_default?: boolean;
}

// Сервис для работы с пользователями
export const userService = {
  // Получить профиль текущего пользователя
  getCurrentUser: async (): Promise<User> => {
    const response = await api.get('/users/me');
    return response.data.user;
  },

  // Обновить профиль текущего пользователя
  updateCurrentUser: async (userData: UserUpdate): Promise<User> => {
    const response = await api.put('/users/me', userData);
    return response.data;
  },

  // Добавить адрес для текущего пользователя
  addAddress: async (address: AddressCreate): Promise<Address> => {
    const response = await api.post('/users/me/addresses', address);
    return response.data;
  },

  // Обновить адрес
  updateAddress: async (addressId: number, address: AddressUpdate): Promise<Address> => {
    const response = await api.put(`/users/me/addresses/${addressId}`, address);
    return response.data;
  },

  // Удалить адрес
  deleteAddress: async (addressId: number): Promise<void> => {
    await api.delete(`/users/me/addresses/${addressId}`);
  },

  // Получить информацию о пользователе по ID (только для админов)
  getUserById: async (userId: number): Promise<User> => {
    const response = await api.get(`/users/${userId}`);
    return response.data;
  },

  // Получить список всех пользователей (только для админов)
  getUsers: async (params?: {
    skip?: number;
    limit?: number;
    search?: string;
  }): Promise<{ users: User[], total: number }> => {
    const response = await api.get('/users', { params });
    return response.data;
  }
}; 