import { request } from './request';

export interface NotifyMessage {
  id: number;
  templateCode: string;
  templateNickname: string;
  templateContent: string;
  templateType: number;
  templateParams: Record<string, unknown> | string;
  readStatus: boolean;
  readTime: string | null;
  createTime: string;
}

export interface PageResult<T> {
  total: number;
  list: T[];
}

function authHeader(accessToken: string) {
  return { Authorization: `Bearer ${accessToken}` };
}

export function getUnreadNotifyMessageCount(accessToken: string) {
  return request<number>('/system/notify-message/get-unread-count', {
    header: authHeader(accessToken),
  });
}

export function getMyNotifyMessagePage(
  accessToken: string,
  params: { pageNo: number; pageSize: number; readStatus?: boolean },
) {
  return request<PageResult<NotifyMessage>>('/system/notify-message/my-page', {
    data: {
      pageNo: params.pageNo,
      pageSize: params.pageSize,
      ...(params.readStatus === undefined ? {} : { readStatus: params.readStatus }),
    },
    header: authHeader(accessToken),
  });
}

export function updateNotifyMessageRead(accessToken: string, ids: number[]) {
  const query = ids.map((id) => `ids=${encodeURIComponent(id)}`).join('&');
  return request<boolean>(`/system/notify-message/update-read?${query}`, {
    method: 'PUT',
    data: {},
    header: authHeader(accessToken),
  });
}

export function updateAllNotifyMessageRead(accessToken: string) {
  return request<boolean>('/system/notify-message/update-all-read', {
    method: 'PUT',
    data: {},
    header: authHeader(accessToken),
  });
}
