import {
  Event,
  EventListRequestBody,
  EventListResponse,
  EventSubmitRequestForm,
} from '@/types/Events';

import { getCategoryColors } from '@/config/calendarCategories';

import { javaPost } from './apiClient';

const defaultBody: EventListRequestBody = {
  fromDate: '20250801',
  toDate: '20281231',
  personId: null,
  showMultiday: false,
};

export async function getEventsByDate(
  body: Partial<EventListRequestBody> = {}
): Promise<EventListResponse> {
  try {
    const response = await javaPost('eventWorksheetControl/getEventsNew', {
      ...defaultBody,
      ...body,
    });

    if (!response) {
      return [];
    }

    return response.map((event: Event) => {
      const category = event.esemenyKategoria?.[0]?.nev || 'Egyeb';

      return {
        ...event,
        category: category,
        bgColor: getCategoryColors(category).bgColor,
        color: getCategoryColors(category).color,
      };
    });
  } catch (error) {
    console.error('Error fetching events by date:', error);
    // Return an empty array or a default EventListResponse structure
    return [];
  }
}

export async function getEventBySlug(body: { slug: string }): Promise<Event | null> {
  try {
    const response = await javaPost('eventWorksheetControl/getEventBySlug', body);
    return response;
  } catch (error) {
    console.error('Error fetching events by date:', error);
    return null;
  }
}

export async function sendEventExternalUpload(body: EventSubmitRequestForm): Promise<boolean> {
  try {
    const response = await javaPost('eventExternalUploadControl/sendData', body);
    return response;
  } catch (error) {
    console.error('Error sending external event upload:', error);
    return false;
  }
}

export interface EventComboItem {
  name: string;
  id: number;
}

export async function getEventCombo(
  level: number,
  value: number | string | null
): Promise<EventComboItem[]> {
  try {
    const response = await javaPost('eventExternalUploadControl/getEventCombo', {
      level,
      value,
    });

    return response;
  } catch (error) {
    console.error('Error fetching event combo:', error);
    return [];
  }
}

export async function uploadEventImage(file: string) {
  try {
    const response = await javaPost(`imageRepository/uploadFile?file=${file}`, {});
    return response;
  } catch (error) {
    console.error('Error deleting uploaded file:', error);
    return false;
  }
}

export async function deleteUploadedEventImage(file: string) {
  try {
    const response = await javaPost(`imageRepository/deleteFile?file=${file}`, {});
    return response;
  } catch (error) {
    console.error('Error deleting uploaded file:', error);
    return false;
  }
}
