import axiosInstance from '../../utils/axios';
import { PageParam, PageResponse } from '../user';

// 站内信消息类型
export interface NotifyMessageVO {
  id: number;
  userId: number;
  userType: number;
  templateId?: number;
  templateCode?: string;
  templateNickname?: string;
  templateContent?: string;
  templateParams?: any;
  templateType?: number;
  title: string;
  createTime?: number | string; // 创建时间（时间戳或字符串）
  readStatus?: boolean; // 是否已读
  readTime?: number | string; // 阅读时间（时间戳或字符串）
}

// 站内信查询参数
export interface NotifyMessageQueryParams extends PageParam {
  readStatus?: boolean; // 消息状态：true(已读)/false(未读)，不传则查询全部
  title?: string; // 消息标题（模糊查询）
  'createTime[0]'?: string; // 开始日期时间：格式 YYYY-MM-DD 00:00:00
  'createTime[1]'?: string; // 结束日期时间：格式 YYYY-MM-DD 23:59:59
  [key: string]: any; // 允许动态添加其他参数
}

// 发送站内信参数
export interface SendNotifyMessageVO {
  title: string; // 消息标题
  content: string; // 消息内容
  type?: string; // 消息类型
  userIds?: number[]; // 接收用户ID列表
  deptIds?: number[]; // 接收部门ID列表
  roleIds?: number[]; // 接收角色ID列表
}

// 站内信 API
export const in_site = {
  // 获取我的站内信列表（分页）
  getMyPage: (params?: NotifyMessageQueryParams): Promise<PageResponse<NotifyMessageVO>> => {
    return axiosInstance.get('/system/notify-message/my-page', { params });
  },

  // 标记消息为已读
  markAsRead: (ids: number[]): Promise<void> => {
    // ids 作为查询参数传递，多个 id 用逗号分隔
    const idsParam = ids.join(',');
    return axiosInstance.put(`/system/notify-message/update-read?ids=${idsParam}`);
  },

  // 全部标记为已读
  markAllAsRead: (): Promise<void> => {
    return axiosInstance.put('/system/notify-message/update-all-read');
  },

  // 获取消息详情
  getMessage: (id: number): Promise<NotifyMessageVO> => {
    return axiosInstance.get(`/system/notify-message/get?id=${id}`);
  },

  // 获取未读消息数量
  getUnreadCount: (): Promise<number> => {
    return axiosInstance.get('/system/notify-message/get-unread-count');
  },

  // 获取未读消息列表
  getUnreadList: (): Promise<NotifyMessageVO[]> => {
    return axiosInstance.get('/system/notify-message/get-unread-list');
  },

  // 发送站内信
  sendMessage: (data: SendNotifyMessageVO): Promise<void> => {
    return axiosInstance.post('/system/notify-message/send', data);
  },
};
