import apiGlobal from '@/services/apiGlobal';
import axios, { AxiosError } from 'axios';


export const updateOrderStatus = async (
  id: string,
) => {
  const response = await apiGlobal.put(`/changeOrderStatus/${id}`);
  return response;
};
export const getOrderDetails = async (
  id: string,
) => {
  const response = await apiGlobal.get(`/fetchSingleOrder/${id}`);
  return response;
};


export const getAllUsers = async ({
    offset,
    limit,
    search,
    sort,
    sortField,
  }: {
    offset: number;
    limit: number;
    search: string;
    sort: string;
    sortField: string;
  }) => {
    const response = await apiGlobal.get(
      `/fetchAllUsers?skip=${offset}&limit=${limit}&sort=${sort}&sortField=${sortField}`
    );
    return response;
  };

// Fetch events joined by a specific user
export const fetchEventsJoinedByUserId = async (userId: string) => {
  const response = await apiGlobal.get(`/event/fetchEventsJoinedByUserId/${userId}`);
  return response;
};

// Fetch single user details by ID
export const fetchSingleUser = async (userId: string) => {
  const response = await apiGlobal.get(`/fetchSingleUser/${userId}`);
  return response;
};

// Update user information by admin
export const updateUserInfo = async (
  userId: string,
  userData: {
    fullName: string;
    emailAddress: string;
    phoneNumber: string;
    gender?: string;
    dateOfBirth?: string;
    address?: string;
    country?: string;
    state?: string;
    city?: string;
    isEmailSubscribed?: boolean;
    isPhoneSubscribed?: boolean;
  }
) => {
  const response = await apiGlobal.put(`/updateUser/${userId}`, userData);
  return response;
};

// Update volunteer information by admin
export const updateVolunteerInfo = async (
  volunteerId: string,
  volunteerData: {
    firstName: string;
    lastName: string;
    emailAddress: string;
    phoneNumber: string;
    address?: string;
    preferedMethodOfcontact?: 'phoneNumber' | 'emailAddress';
    goodAt?: string;
    interest?: string | string[];
    hearFrom?: string;
    status?: 'pending' | 'accepted' | 'rejected' | 'deleted';
    isEmailSubscribed?: boolean;
    isPhoneSubscribed?: boolean;
  }
) => {
  const response = await apiGlobal.put(`/updateVolunteer/${volunteerId}`, volunteerData);
  return response;
};

// Export users to CSV
export const exportUsersToCSV = (users: any[]) => {
  const headers = [
    'Email Address',
    'Full Name',
    'Phone Number',
    'Country',
    'State',
    'City',
    'Gender',
    'Date of Birth',
    'Profile Completed',
    'Signup Date',
    'Last Login',
  ];

  const csvData = users.map(user => [
    user.emailAddress || '',
    user.fullName || '',
    user.phoneNumber || '',
    user.country || '',
    user.state || '',
    user.city || '',
    user.gender || '',
    user.dateOfBirth || '',
    user.isProfileCompleted ? 'Yes' : 'No',
    user.createdAt || '',
    user.lastLogin || 'Never',
  ]);

  const csvContent = [
    headers.join(','),
    ...csvData.map(row => row.map(field => `"${field}"`).join(','))
  ].join('\n');

  const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
  const link = document.createElement('a');
  const url = URL.createObjectURL(blob);
  link.setAttribute('href', url);
  link.setAttribute('download', `users_${new Date().toISOString().split('T')[0]}.csv`);
  link.style.visibility = 'hidden';
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
};
