import ApiService from "./ApiService";

// Time Tracking interfaces
export interface TimeEntry {
  id: string;
  project_id: string;
  activity_type_id: string;
  description: string;
  start_time: string;
  end_time: string | null;
  total_seconds: number;
  user_id: string;
  date: string;
  hourly_rate: number;
  cost: number;
  created_at?: string;
  updated_at?: string;
  latitude?: number;
  longitude?: number;
  location_required?: number;
  project?: {
    id: string;
    name: string;
    client?: {
      id: string;
      name: string;
    };
  };
  activityType?: {
    id: string;
    name: string;
    location_required?: number;
  };
  employee?: {
    id: string;
    first_name: string;
    last_name: string;
  };
}

export interface TimeTrackingFilters {
  search?: string;
  project_id?: string;
  activity_type_id?: string;
  date_from?: string;
  date_to?: string;
  page?: number;
  limit?: number;
  order?: "ASC" | "DESC";
  column_name?: string;
}

export interface CreateTimeEntryData {
  project_id: string;
  activity_type_id: string;
  description: string;
  start_time: string;
  end_time?: string;
  latitude?: number;
  longitude?: number;
}

export interface UpdateTimeEntryData {
  id: string;
  project_id?: string;
  activity_type_id?: string;
  description?: string;
  start_time?: string;
  end_time?: string;
  latitude?: number;
  longitude?: number;
}

export interface TimeEntryListResponse {
  success: boolean;
  message?: string;
  data: {
    data: TimeEntry[];
    count: number;
  };
}

export interface TimeEntryResponse {
  success: boolean;
  message?: string;
  data: TimeEntry;
}

export interface DeleteTimeEntryResponse {
  success: boolean;
  message?: string;
}

// Create Time Entry
export async function createTimeEntry(data: CreateTimeEntryData) {
  return ApiService.request<TimeEntryResponse>({
    url: "/time-tracking",
    method: "post",
    data,
  });
}

// Get Time Entries with filters
export async function getTimeEntries(filters?: TimeTrackingFilters) {
  const params: any = {
    search: filters?.search || "",
    page: filters?.page || 1,
    limit: filters?.limit || 10,
  };

  // Add optional filters
  if (filters?.project_id) {
    params.project_id = filters.project_id;
  }
  if (filters?.activity_type_id) {
    params.activity_type_id = filters.activity_type_id;
  }
  if (filters?.date_from) {
    params.date_from = filters.date_from;
  }
  if (filters?.date_to) {
    params.date_to = filters.date_to;
  }
  if (filters?.order) {
    params.order = filters.order;
  }
  if (filters?.column_name) {
    params.column_name = filters.column_name;
  }

  return ApiService.request<TimeEntryListResponse>({
    url: "/time-tracking",
    method: "get",
    params,
  });
}

// Get Time Entry by ID
export async function getTimeEntryById(id: string) {
  return ApiService.request<TimeEntryResponse>({
    url: `/time-tracking/${id}`,
    method: "get",
  });
}

// Update Time Entry
export async function updateTimeEntry(data: UpdateTimeEntryData) {
  const { id, ...updateData } = data;
  return ApiService.request<TimeEntryResponse>({
    url: `/time-tracking/${id}`,
    method: "put",
    data: updateData,
  });
}

// Stop Time Entry (specific endpoint for stopping ongoing activities)
export async function stopTimeEntry(id: string) {
  return ApiService.request<TimeEntryResponse>({
    url: `/time-tracking/stop/${id}`,
    method: "patch",
  });
}

// Delete Time Entry
export async function deleteTimeEntry(id: string) {
  return ApiService.request<DeleteTimeEntryResponse>({
    url: `/time-tracking/${id}`,
    method: "delete",
  });
}
