import { apiClient } from "./client";

export interface NotificationItem {
	id: string;
	user_id: string;
	category: string;
	severity: "info" | "warning" | "error" | "success";
	title: string;
	message: string | null;
	source_type: string | null;
	source_id: string | null;
	metadata: Record<string, unknown>;
	read_at: string | null;
	dismissed_at: string | null;
	created_at: string;
}

export interface NotificationListResponse {
	items: NotificationItem[];
	total: number;
	limit: number;
	offset: number;
}

export interface UnreadCountResponse {
	count: number;
}

export interface MarkAllReadResponse {
	marked_count: number;
}

export interface ClearAllResponse {
	cleared_count: number;
}

export const getNotifications = async (): Promise<NotificationListResponse> => {
	const response =
		await apiClient.get<NotificationListResponse>("/notifications");
	return response.data;
};

export const getUnreadCount = async (): Promise<number> => {
	const response = await apiClient.get<UnreadCountResponse>(
		"/notifications/unread",
	);
	return response.data.count;
};

export const markNotificationRead = async (
	id: string,
): Promise<NotificationItem> => {
	const response = await apiClient.patch<NotificationItem>(
		`/notifications/${id}/read`,
	);
	return response.data;
};

export const markAllNotificationsRead = async (): Promise<number> => {
	const response = await apiClient.post<MarkAllReadResponse>(
		"/notifications/mark-all-read",
	);
	return response.data.marked_count;
};

export const dismissNotification = async (id: string): Promise<void> => {
	await apiClient.delete(`/notifications/${id}`);
};

export const clearAllNotifications = async (): Promise<number> => {
	const response = await apiClient.delete<ClearAllResponse>("/notifications");
	return response.data.cleared_count;
};
