// lib/api/notification.api.ts
import { fetchApi } from '@/lib/api/http';

// ✅ FIXED — matches your other API files (NEXT_PUBLIC_API_URL not NEXT_PUBLIC_API_BASE_URL)
const BASE = process.env.NEXT_PUBLIC_API_URL ?? 'http://localhost:3007/api';

export interface AppNotification {
  id:            number;
  inquiry_id:    number;
  inquiry_ref:   string;
  company_name:  string;
  type:          string;
  message:       string;
  old_status:    string;
  new_status:    string;
  pdf_url?:      string;
  docx_url?:     string;
  is_read:       boolean;
  is_resolved:   boolean;
  created_at:    string;
  resolved_at?:  string;
}

export interface NotificationMeta {
  total: number; page: number; limit: number; totalPages: number;
}

// ── GET all notifications for user ───────────────────────────────────────────
export async function getNotifications(
  userId: number,
  params?: { page?: number; limit?: number; is_resolved?: boolean; type?: string },
): Promise<{ data: AppNotification[]; meta: NotificationMeta }> {
  const q = new URLSearchParams();
  q.set('userId', String(userId));
  if (params?.page)  q.set('page',  String(params.page));
  if (params?.limit) q.set('limit', String(params.limit));
  if (params?.type)  q.set('type',  params.type);
  if (params?.is_resolved !== undefined)
    q.set('is_resolved', String(params.is_resolved));
  return fetchApi(`${BASE}/inquiry-notifications?${q.toString()}`);
}

// ── GET unread count — for bell badge ────────────────────────────────────────
export async function getUnreadCount(userId: number): Promise<number> {
  const res: { count: number } = await fetchApi(
    `${BASE}/inquiry-notifications/unread-count?userId=${userId}`,
  );
  return res.count;
}

// ── Mark single as read ──────────────────────────────────────────────────────
export async function markAsRead(id: number, userId: number): Promise<void> {
  return fetchApi(`${BASE}/inquiry-notifications/${id}/read?userId=${userId}`, {
    method: 'PATCH',
  });
}

// ── ✅ NEW — Mark single as unread ───────────────────────────────────────────
export async function markAsUnread(id: number, userId: number): Promise<void> {
  return fetchApi(`${BASE}/inquiry-notifications/${id}/unread?userId=${userId}`, {
    method: 'PATCH',
  });
}

// ── Mark all as read ─────────────────────────────────────────────────────────
export async function markAllAsRead(userId: number): Promise<void> {
  return fetchApi(`${BASE}/inquiry-notifications/read-all?userId=${userId}`, {
    method: 'PATCH',
  });
}

// ── Mark single as resolved ──────────────────────────────────────────────────
export async function markAsResolved(id: number, userId: number): Promise<void> {
  return fetchApi(`${BASE}/inquiry-notifications/${id}/resolve?userId=${userId}`, {
    method: 'PATCH',
  });
}

// ── Mark all as resolved ─────────────────────────────────────────────────────
export async function markAllResolved(userId: number): Promise<void> {
  return fetchApi(`${BASE}/inquiry-notifications/resolve-all?userId=${userId}`, {
    method: 'PATCH',
  });
}