import { http } from '@/utils/http/axios';

/**
 * @description: 查询未读消息列表
 */
export interface UnReadNoticeInfo {
  id: number; // 消息通知id
  notifierUserId: number; // 被通知人用户id
  infoType: number; // 消息类型：1-灾害预警 2-防御通知 3-预防检查任务 4-灾害处置上报任务 5-灾害处置整改任务
  infoOutline: string; // 消息概要
  infoStatus: number; // 消息状态：1-已处理、2-未处理、3-忽略
  pushChannel: number; // 推送渠道：1-首页
  detail: string; // 详情(JSON)
  sourceId: number; // 消息来源id
  createdAt: string; // 创建时间
  updatedAt: string; // 更新时间
  isDeleted: number; // 0-未删除，大于0-已删除
}
export const getUnReadNoticeInfoList = () => {
  return http.request<UnReadNoticeInfo[]>({
    url: '/noticeInfo/queryUnReadNoticeInfoList',
    method: 'get',
  });
};

/**
 * @description: 更新消息通知状态
 */
export interface UpdateUnReadNoticeInfoStatusParams {
  id: number; // 消息通知id
  status: number; // 修改状态:1-已读 2-未读 3-忽略
}
export const updateUnReadNoticeInfoStatus = (params: UpdateUnReadNoticeInfoStatusParams) => {
  return http.request({
    url: '/noticeInfo/updateNoticeInfoStatus',
    method: 'post',
    params,
  });
};

/**
 * @description: 灾害预警记录(timespan: 1-本周，2-本月，3-季度，4-年度)
 */
export interface WarnRecord {
  disasterType: string; // 灾害类型
  warnTime: string; // 预警时间
  source: string; // 信息来源
  content: string; // 发布内容
}
export interface DisasterWarningRecordsRes {
  warnCount: number; // 预警数量
  warnRecord: WarnRecord[]; // 预警记录
}
export const getDisasterWarningRecords = (duration: number) => {
  return http.request<DisasterWarningRecordsRes[]>({
    url: `/overview/queryOverviewDisasterWarn?timespan=${duration}`,
    method: 'get',
  });
};

/**
 * @description: 预防检查
 */
export interface QueryCheckingListsParams {
  pageNumber?: number;
  pageSize?: number;
  queryParam?: {};
}
export interface TaskRecord {
  id: number; // 任务id
  inspectType: number; // 检查类型：1-台汛前期检查，2-台汛中期检查，3-台汛后期检查
  deptName: string; // 被检查单位名称
  updatedAt: string; // 更新时间
  taskState: number; // 任务状态：1-待发布，2-待检查，3-待审批，4-已完成
  hasHazard: boolean; // 检查结果：false-不存在隐患，true-存在隐患
}
export interface PreventInspectInfoRes {
  totalTask: number; // 总任务数
  submittedTask: number; // 待签字任务数
  signedTask: number; // 已签字任务数
  passTask: number; // 通过任务数
  dangerTask: number; // 隐患任务数
  taskRecord: TaskRecord[]; // 检查任务记录
  pageNumber: number;
  pageSize: number;
  totalPage: number;
  totalRow: number;
}
export const getPreventInspect = (params: QueryCheckingListsParams) => {
  return http.request<PreventInspectInfoRes>({
    url: '/overview/queryOverviewPreventInspect',
    method: 'post',
    params,
  });
};

/**
 * @description: 灾害处置
 */
export interface DisasterHandleInfoRecord {
  affectedItems: string; // 受灾物品
  deptId: number; // 损失部门id
  deptName: string; // 损失部门
  affectedLocation: string; // 受灾地点
  fixStatus: number; // 整改进度：1-待整改 2-已响应 3-已更新 4-已完成 5-暂时关闭
  fixerId: number; // 整改人员id
  fixerName: string; // 整改人员名称
  fixerStaffNo: string; // 整改人员工号
}
export interface QueryDisasterHandleOverviewRes {
  dueReportDeptCount: number; // 应上报部门数量
  completeReportDeptCount: number; // 已上报部门数量
  existLossDeptCount: number; // 存在损失部门数量
  lossRecordCount: number; // 损失记录数量
  completeHandleCount: number; // 处置完成数量
  disasterHandleInfoList: DisasterHandleInfoRecord[];
  pageNumber: number;
  pageSize: number;
  totalPage: number;
  totalRow: number;
}
export const getDisasterHandleOverview = (params: QueryCheckingListsParams) => {
  return http.request<QueryDisasterHandleOverviewRes>({
    url: '/disasterHandle/queryDisasterHandleOverview',
    method: 'post',
    params,
  });
};

/**
 * @description: 通知与管理规定（防御通知）
 */
export interface NoticeAndRulesRes {
  id: number; // 通知id
  title: string; // 通知标题
  createdBy: number; // 创建人id
  createdName: string; // 创建人姓名
  pushTime: string; // 发布时间
}
export const getNoticeAndRules = () => {
  return http.request<NoticeAndRulesRes[]>({
    url: '/overview/queryOverviewDefenseNotice',
    method: 'get',
  });
};

/**
 * @description: 重点监测区域：查看相机分组列表
 */
export interface GetCameraGroupListRes {
  id: number; // 分组id
  groupName: string; // 分组名称
  isDefault: number;
  playIntervalSec: number; // 轮播间隔
  isPaused: number; // 是否暂停播放
  children: CameraInfo[]; // 分组相机列表
}
export interface CameraInfo {
  networkingState: number; // 联网状态: 0-启用, 1-禁用
  integrationState: number; // 接入状态: 0-启用, 1-禁用
  render: string; // 渲染选择，无渲染/某个算法
  version: number; // 版本
  extra: string; // 扩展数据
  pushStreamDTO: {
    videoUrls: {
      pushstreamIp: string; // 推流地址(前端播放的地址)
      pushstreamRenderUrl: string; // 渲染推流地址(前端播放的渲染地址)
      m3u8PushstreamIp: string; // ios推流地址(前端播放的地址)
      m3u8PushstreamRenderIp: string; // ios推流地址(前端播放的地址)
      pushstreamIpAbs: string; // 推流地址(前端播放的地址)
      pushstreamRenderUrlAbs: string; // 渲染推流地址(前端播放的渲染地址)
      m3u8PushstreamIpAbs: string; // ios推流地址(前端播放的地址)
      m3u8PushstreamRenderIpAbs: string; // ios推流地址(前端播放的地址)
    };
    imageUrl: string; // 摄像头实时记录的画面
  };
  id: number; // 自增主键
  workshopId: number; // 车间id
  workspaceId: number; // 工位id
  name: string; // 相机名称
  code: string; // 相机编号
  cameraIp: string; // 相机IP
  cameraPort: string; // 相机端口
  cameraType: string; // 相机类型: haikang/dahua/anxus/huawei
  remark: string; // 描述
  sourceType: string; // 添加方式： IP，NVR，RTSP
  rtspUrl: string; // rtsp地址
  nvrId: number; // NVR id
  nvrChannel: string; // NVR通道号
  videoStandard: string; // 视频编码标准，H264, H265
  videoServiceType: string; // 视频服务类型，TCP, UDP, AUTO
  isDisabled: number; // 状态: 0-启用, 1-禁用
}
export const getMonitorCameraLists = () => {
  return http.request({
    url: '/cameraGroup/queryCameraGroupList?type=1',
    method: 'get',
  });
};

/**
 * @description: 重点监测区域：根据用户查询相机树
 */
export interface QueryAllOwnedCameraTreeRes {
  nodeType: string; // 节点类型
  id: number; // 公司id
  parentId?: number; // 上级公司Id, 无上级为0
  name: string; // 公司名称
  code: string; // 公司编号
  remark: string; // 描述
  orderNum: number; // 排序序号
  longitude?: Record<string, unknown>; // 经度
  latitude?: Record<string, unknown>; // 纬度
  regionCode?: string; // 区域编码（标识）
  isDisabled: number; // 状态: 0-启用, 1-禁用
  createdBy: number; // 创建人
  updatedBy: number; // 更新人
  createdAt: Record<string, unknown>; // 创建时间
  updatedAt: Record<string, unknown>; // 更新时间
  tenantId: number; // 租户ID
  thumbnail?: string; // 公司缩略图
  // 车间-工位-相机信息
  children: {
    nodeType: string; // 节点类型
    id: number; // 车间id
    companyId: number; // 公司id
    name: string; // 车间名称
    code: string; // 车间编号
    orderNum: number; // 排序序号
    remark: string; // 描述
    isDisabled: number; // 状态: 0-启用, 1-禁用
    createdBy: number; // 创建人
    updatedBy: number; // 更新人
    createdAt: Record<string, unknown>; // 创建时间
    updatedAt: Record<string, unknown>; // 修改时间
    tenantId: number; // 租户ID
    // 工位-相机信息
    children: {
      nodeType: string; // 节点类型
      id: number; // 工位id
      workshopId: number; // 车间id
      name: string; // 工位名称
      code: string; // 工位编号
      remark: string; // 描述
      orderNum: number; // 排序序号
      principalName: string; // 工位负责人
      principalId: number; // 工位负责人id
      isDisabled: number; // 状态: 0-启用, 1-禁用
      createdBy: number; // 创建人
      updatedBy: number; // 更新人
      createdAt: Record<string, unknown>; // 创建时间
      updatedAt: Record<string, unknown>; // 更新时间
      tenantId: number; // 租户ID
      // 相机信息
      children: CameraInTree[];
    }[];
  }[];
}
export interface CameraInTree {	"data": [
  {
    "dataTime": "",
    "minTemperature": "",
    "maxTemperature": "",
    "minWindVelocity": 0,
    "maxWindVelocity": 0,
    "avgWindVelocity": 0
  }
]

  networkingState: number; // 联网状态: 0-启用, 1-禁用
  integrationState: number; // 接入状态: 0-启用, 1-禁用
  render: string; // 渲染选择，无渲染/某个算法
  version: number; // 版本
  extra: string; // 扩展数据
  pushStreamDTO: {
    videoUrls: {
      pushstreamIp: string; // 推流地址(前端播放的地址)
      pushstreamRenderUrl: string; // 渲染推流地址(前端播放的渲染地址)
      m3u8PushstreamIp: string; // ios推流地址(前端播放的地址)
      m3u8PushstreamRenderIp: string; // ios推流地址(前端播放的地址)
      pushstreamIpAbs: string; // 推流地址(前端播放的地址)
      pushstreamRenderUrlAbs: string; // 渲染推流地址(前端播放的渲染地址)
      m3u8PushstreamIpAbs: string; // ios推流地址(前端播放的地址)
      m3u8PushstreamRenderIpAbs: string; // ios推流地址(前端播放的地址)
    };
    imageUrl: string; // 摄像头实时记录的画面
  };
  id: number; // 自增主键
  workshopId: number; // 车间id
  workspaceId: number; // 工位id
  name: string; // 相机名称
  code: string; // 相机编号
  cameraIp: string; // 相机IP
  cameraPort: string; // 相机端口
  cameraType: string; // 相机类型: haikang/dahua/anxus/huawei
  remark: string; // 描述
  sourceType: string; // 添加方式： IP，NVR，RTSP
  rtspUrl: string; // rtsp地址
  nvrId: number; // NVR id
  nvrChannel: string; // NVR通道号
  videoStandard: string; // 视频编码标准，H264, H265
  videoServiceType: string; // 视频服务类型，TCP, UDP, AUTO
  isDisabled: number; // 状态: 0-启用, 1-禁用
  nodeType: string; // 节点类型
}
export const getCameraTreeList = () => {
  return http.request({
    url: '/camera/queryAllOwnedCameraTree',
    method: 'get',
  });
};

/**
 * @description: 重点监测区域：批量编辑分组内相机
 */
export const updateCameraToOverviewGroup = (params: { groupId: number | undefined; cameraIdList: number[] }) => {
  return http.request({
    url: '/cameraGroup/updateCameraInGroup',
    method: 'post',
    params,
  });
};

/**
 * @description: 获取实时天气数据
 */
export interface RealTimeWeatherDataRes {
  time: string; // 时间
  temperature: string; // 温度℃
  windVelocity: number; // 风速m/s * 3.6 = km/h
}
export const getRealTimeWeatherData = () => {
  return http.request<RealTimeWeatherDataRes>({
    url: '/weatherData/queryWeatherData',
    method: 'get',
  });
};

/**
 * @description: 获取历史气温数据
 */
export interface HistoryTemperatureInfo{
  dataTime : string;
  minTemperature : string;
  maxTemperature : string;  
  minWindVelocity : number;
  maxWindVelocity : number;
  avgWindVelocity : number;
}

export const getHistoryTemperatureList = ()=>{
  return  http.request<HistoryTemperatureInfo[]>({
    url: '/weatherData/queryRecentYearWeatherData',
    method: 'get',
  });
  
}



/**
 * @description: 获取一年高温天气天数
 */
export const getHighTemperatureDays = ()=>{
  return http.request<number>({
    url: '/weatherData/countHotDaysInYear',
    method: 'get',
  });
}
 


/**
 * @description: 获取当日发布的灾害预警信息列表
 */
export interface TodayDisasterWarnInfoType {
  id: number; // 自增主键
  disasterType: string; // 灾害类型
  disasterLevel: string; // 灾害等级
  warnTime: string; // 预警时间
  source: string; // 信息来源
  content: string; // 发布内容
  effectState: number; // 生效状态：1-未生效，2-生效
  createSource: number; // 创建来源：1-人工创建 2-接口数据获取
  isPush: number; // 是否推送：0-不推送 1-推送
  pushTime: string; // 发布时间
  userGroupList: string; // 用户分组列表
  createdBy: number; // 创建人
  createdAt: string; // 创建时间
  updatedAt: string; // 更新时间
  isDeleted: number; // 0-未删除，大于0(时间戳)-已删除
  tenantId: number; // 租户id
}
export const getTodayDisasterWarnInfoList = () => {
  return http.request<TodayDisasterWarnInfoType[]>({
    url: '/disasterWarn/queryTodayDisasterWarnInfoList',
    method: 'get',
  });
};

/**
 * @description: 查询安全态势应急管理统计
 */
export interface DisasterPreventionInfoRes {
  monthDisasterCount: number; // 本月气象灾害预警数
  preventiveInspectRatio: string; // 预防检查覆盖
}
export const getDisasterPreventionInfo = () => {
  return http.request<DisasterPreventionInfoRes>({
    url: '/overview/queryDisasterPreventionStatistics',
    method: 'get',
  });
};
