import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api';
import type { ShopNotification, ShopNotificationParam } from './model';

/**
 * 分页查询消息通知
 */
export async function pageShopNotification(params: ShopNotificationParam) {
  const res = await request.get<ApiResult<PageResult<ShopNotification>>>(
    '/shop/shop-notification/page',
    params
  );
  if (res.code === 0) {
    return res.data;
  }
  return Promise.reject(new Error(res.message));
}

/**
 * 查询全部消息通知
 */
export async function listShopNotification(params?: ShopNotificationParam) {
  const res = await request.get<ApiResult<ShopNotification[]>>(
    '/shop/shop-notification',
    params
  );
  if (res.code === 0 && res.data) {
    return res.data;
  }
  return Promise.reject(new Error(res.message));
}

/**
 * 根据id查询消息通知
 */
export async function getShopNotification(id: number) {
  const res = await request.get<ApiResult<ShopNotification>>(
    '/shop/shop-notification/' + id
  );
  if (res.code === 0) {
    return res.data;
  }
  return Promise.reject(new Error(res.message));
}

/**
 * 添加消息通知
 */
export async function addShopNotification(data: ShopNotification) {
  const res = await request.post<ApiResult<unknown>>(
    '/shop/shop-notification',
    data
  );
  if (res.code === 0) {
    return res.message;
  }
  return Promise.reject(new Error(res.message));
}

/**
 * 修改消息通知
 */
export async function updateShopNotification(data: ShopNotification) {
  const res = await request.put<ApiResult<unknown>>(
    '/shop/shop-notification',
    data
  );
  if (res.code === 0) {
    return res.message;
  }
  return Promise.reject(new Error(res.message));
}

/**
 * 删除消息通知
 */
export async function removeShopNotification(id?: number) {
  const res = await request.del<ApiResult<unknown>>(
    '/shop/shop-notification/' + id
  );
  if (res.code === 0) {
    return res.message;
  }
  return Promise.reject(new Error(res.message));
}

/**
 * 获取用户消息列表
 */
export async function getShopNotificationByUserId(userId: number) {
  const res = await request.get<ApiResult<ShopNotification[]>>(
    '/shop/shop-notification/user/' + userId
  );
  if (res.code === 0 && res.data) {
    return res.data;
  }
  return Promise.reject(new Error(res.message));
}

/**
 * 标记消息已读
 */
export async function markShopNotificationAsRead(id: number, userId: number) {
  const res = await request.put<ApiResult<unknown>>(
    '/shop/shop-notification/read/' + id + '?userId=' + userId,
    null
  );
  if (res.code === 0) {
    return res.message;
  }
  return Promise.reject(new Error(res.message));
}

/**
 * 标记全部已读
 */
export async function markAllShopNotificationAsRead(userId: number) {
  const res = await request.put<ApiResult<unknown>>(
    '/shop/shop-notification/read-all?userId=' + userId,
    null
  );
  if (res.code === 0) {
    return res.message;
  }
  return Promise.reject(new Error(res.message));
}

/**
 * 获取未读消息数量
 */
export async function getShopNotificationUnreadCount(userId: number) {
  const res = await request.get<ApiResult<number>>(
    '/shop/shop-notification/unread-count',
    { userId }
  );
  if (res.code === 0) {
    return res.data;
  }
  return Promise.reject(new Error(res.message));
}
