import { extend } from 'dayjs';
import axios from 'axios';
import type { IArea, ItablePagination } from '../views/AlgorithmConfiguration/index';
import { localStg } from '@/utils/storage';
import { useRouter } from 'vue-router';
import { useMessage } from 'naive-ui';
import { Windows } from '@vicons/fa';


axios.defaults.baseURL = '/v1';

const router = useRouter();
const message = useMessage();

// const resetRouter = () => {
//   return window.href = '/login';
// };


const gloabalReqErrorMsg = (e) => {

  switch (e.code) {
    case "ERR_BAD_REQUEST":
      return window.$message.error("权限过期!")
  }


}


axios.interceptors.request.use((req) => {


  let token = localStg.get('token');

  if (token) req.headers['token'] = `${token}`;

  // let whiteRouteList = ['login']

  // for(let r of whiteRouteList) {

  // }

  return req;
}, (e) => Promise.reject(e));



axios.interceptors.response.use((res) => {
  console.log('------------------------- res', res)
  if (res.status === 401) {
    window.location.href = '/login'
  };
  return res;

}, (e) => {
  window.location.href = '/login'
});



//  区域 - 查
export const api_getAreaNode = async (): Promise<any> => await axios.get('/menus/tree');

// 区域 - 增
export const api_addAreaNode = async (data: IArea): Promise<any> => await axios.post('/menus', data);

// 区域 - 改
export const api_modifyAreaNode = async (data: IArea): Promise<any> => await axios.put('/menus', data);

// 区域 - 删
export const api_deleteAreaNode = async (id: number | string): Promise<any> => await axios.delete(`/menus/${id}`);

// 区域 = 查
export const api_getCameras = async (): Promise<any> => await axios.get(`/menus`);

// 摄像头 - 查
export const api_getCameraList = async (params: ItablePagination): Promise<any> =>
  await axios.get(`/cameras/page`, { params });

// 摄像头 - 增
export const api_addCameras = async (data: any): Promise<any> => await axios.post(`/cameras`, data);

// 摄像头 - 改
export const api_modifyCameras = async (data: any): Promise<any> => await axios.put(`/cameras`, data);

// 摄像头 - 删
export const api_delCameras = async (id: any): Promise<any> => await axios.delete(`/cameras/${id}`);

// 模板下载
export const api_downWebCam = async (id: string): Promise<any> => await axios.get(`/export/${id}`);

// 导出 - blob
export const api_exportBlobFile = async (ids: string): Promise<any> =>
  await axios.get(`/export/${ids}`, { responseType: 'blob' });

// 文件上传 - base64 -> ip
export const api_base64ToWebURl = async (image: string): Promise<any> => await axios.post(`/common/image`, { image });

// 算法 - 查
export const api_algorithms = async (params: ItablePagination): Promise<any> =>
  axios.get(`/algorithms/page`, { params });

// 算法 - 改
export const api_modifyAlgorithms = async (id: string, grade: string): Promise<any> =>
  axios.put(`/algorithms/${id}/${grade}`);

// ============================================================================================ 新增分析任务
// ================ 临时 | S
interface IAnalyItemParam {
  algorithmId: number | string;
  algorithmName: string;
  cameraIds?: any[];
  [key: string]: any;
}

// 修改类
interface IModifyTaskParam {
  id: string;
  isGrab: string;
  status: string;
  taskName: string;
  timeInterval: string;
  transcribeTime: string;
  videoVo: IAnalyItemParam[];
}


// ================ 临时 | E

// 新增类
type IAddTaskParam = IModifyTaskParam;

// 视频分析任务-新增任务
export const api_addTask = async (data: IAddTaskParam): Promise<any> => axios.post(`/videos`, data);

// 视频分析任务-编辑任务
export const api_modifyTask = async (data: IModifyTaskParam): Promise<any> => axios.put(`/videos`, data);

// 视频分析任务分页查询
export const api_getTask = async (data: ItablePagination): Promise<any> =>
  axios.get(`/videos/page?pageNum=${data.pageNum}&pageSize=${data.pageSize}&taskName=${data.taskName}`);

// 视频分析任务-单删
export const api_delTask = async (id: string): Promise<any> => axios.delete(`/videos/${id}`);

// 视频分析任务-变更任务状态
export const api_modifyTaskStatus = async (id: string, status: string): Promise<any> =>
  axios.put(`/videos/${id}/${status}`);

// 视频分析任务 - 单条数据
export const api_findModifyTaskInfo = async (id: string): Promise<any> => axios.get(`/videos/${id}`);


// ================================================================================= 报警分页日志查询 | S
interface IAlarmLogParam {
  algorithmGrade?: string;
  algorithmName?: string;
  pageNum?: string;
  pageSize?: string;
  resourceNo?: number;
  status?: string;
}


// 获取报警日志
export const api_getAlarmLog = async (params: IAlarmLogParam): Promise<any> => axios.get(`/alarm/logs/page`, { params });


// 删除日志记录
export const api_delAlarmLog = async (id: string): Promise<any> => axios.delete(`/alarm/logs/${id}`);

// 修改报警日志状态
export const api_modifyAlarmLog = async (id: string, status: string): Promise<any> => axios.put(`/alarm/logs/${id}/${status}`);


// ================================================================================= 报警分页日志查询 | E

interface IPushParamTask {
  id?: string;
  videoTaskId?: string;
  videoTaskName?: string;
}




interface IPushParamResult {
  contentName?: string;
  contentRemark?: string;
  id?: string;
  pushId?: string;
}




interface IPushParamCamera {
  contentName: string;
  contentRemark: string;
  id: string;
  pushId: string;
}




interface IPushParamAlgorithm {
  contentName: string;
  contentRemark: string;
  id: string;
  pushId: string;
}



interface IPushParam {
  algorithmList?: IPushParamAlgorithm[],
  cameraList?: IPushParamCamera[],
  id?: string;
  pushAddress?: string;
  pushName?: string;
  resultList?: IPushParamResult[],
  status?: string;
  videoTaskVoList?: IPushParamTask[]
}



// 新增报警推送
export const api_addAlarmPush = async (data: IPushParam) => {
  return await axios.post(`/pushs`, data)
};

// 修改报警推送
export const api_modifyAlarmPush = async (data: IPushParam) => {
  return await axios.put(`/pushs`, data)
};

// 报警推送查单全部
export const api_findPushItem = async (id) => {
  return await axios.get(`/pushs/${id}`)
}

// 推送删除
export const api_delPushItem = async (id) => {
  return await axios.delete(`/pushs/${id}`)
}

// 算法信息
export const api_getKeyOfAnaly = async () => {
  return await axios.get(`/pushs/algorithm`)
};

// 视频源信息
export const api_getKeyOfVideoSource = async () => {
  return await axios.get(`/pushs/camera`)
};

// 视频任务信息
export const api_getKeyTaskInfo = async () => {
  return await axios.get(`/pushs/video_task`)
};



// 推送 - 测试
export const api_test = async () => {
  return await axios.get('/pushs/test')
}


// 视频推送 - 视频任务列表
export const api_videoTaskKey = async () => {
  return await axios.get(`/videos/list`)
}


// 视频推送 - 分页查询
export const api_pushList = async (data) => {
  return await axios.get(`/pushs/page?pageNum=${data.pageNum}&pageSize=${data.pageSize}`)
}

// ===================================================== 报警提醒 | E

// 报警提醒 - 算法列表
export const api_algorithmsList = async () => {
  return await axios.get(`/algorithms/list`)
}


interface popUpsConfigParam {
  ids: string;
  isRemind: string;
  isVoice: string;
  reminderType: string;
}

// 报警提醒 - 修改弹窗相关配置
export const api_algorithmsPopUpsConfig = async (data: popUpsConfigParam) => {
  await axios.put(`/algorithms/popUps`, data)
}


// 算法提醒 - 分页查询

export const api_algorithmsPopUpsPage = async (data: any) => {
  return await axios.get(`/algorithms/page?pageNum=${data.pageNum}&pageSize=${data.pageSize}`)
}


// 算法提醒 - 修改弹窗配置回显
export const api_algorithmsPopUpsFind = async () => {
  // /algorithms/list
  return await axios.get(`/algorithms/list`)
}


// 算法提醒 - 删除语音
export const api_algorithmsPopUpsDel = async (id: string) => {
  return await axios.put(`/algorithms/audio/${id}`)
}

// 视频回放 - 临时测试
// /videos/test
export const api_videoTest = async () => {
  return await axios.get(`/videos/test`)
}


// ========================================================= 用户角色管理 | S

// 用户分页查询
export const api_userList = async (data: any) => {
  return await axios.get(`/users/page?pageNum=${data.pageNum}&pageSize=${data.pageSize}&userName=${data.userName}`)
}

// 新增用户
export const api_addUserInfo = async (data: any) => {
  return await axios.post(`/users`, data)
}


// 修改用户信息
export const api_modifyUserInfo = async (data: any) => {
  return await axios.put(`/users`, data)
}


// 删除用户信息
export const api_delUserInfo = async (id: string) => {
  return await axios.delete(`/users/${id}`)
}


// 修改密码
export const api_modifyUserPass = async (id: string, password: string) => {
  return await axios.put(`/users/${id}/${password}`)
}


// 查询角色管理
export const api_roleList = async () => {
  return await axios.get('/roles/list')
}

// ======================================================== 角色管理 | E

interface IRoleParam {
  permissions?: string;
  roleName?: string;
  roleRemark?: string;
}

// 新增角色
export const api_addRole = async (data: IRoleParam) => {
  return await axios.post('/roles', data)
}

// 查询角色详情
export const api_findfRoleInfo = async (id: string) => {
  return await axios.post(`/roles/${id}`)
}

// ============================== 音视频相关 | S


// 音频文件
export const getAudioFile = async (audioId: string) => {
  return await axios.get(`/play/${audioId}`)
  // return await axios.get(`/play/${audioId}?audioId=${audioId}`)
}


// 视频文件
export const getVideoFile = async (fileName: string) => {
  return await axios.get(`/playVideo/${fileName}`)
}


// 修改角色信息
export const api_modifyRoleInfo = async (data: any) => {
  return await axios.put(`/roles`, data)
}


// 删除角色
export const api_delRoleInfo = async (id: string) => {
  return await axios.delete(`/roles/${id}`)
}


// 权限 - 权限树列表
export const api_permissionTreeList = async () => {
  return await axios.get(`/permission/tree`)
}

// ======================================== 首页 - /datas/points-count
export const api_pointsCount = async () => {
  return await axios.get(`/datas/points-count`)
}


export const api_taskCount = async () => {
  return await axios.get(`/datas/task-count`)
}



export const api_logCount = async (date) => {
  return await axios.get(`/datas/log-count/${date[0]}/${date[1]}`)
}


// ================================= 登录注册

// 登录
export const api_login = async (data: any) => {
  return await axios.post('/logins/login', data)
}

// 权限查询
export const api_permission = async () => {
  return await axios.get('/logins/list')
}


// 查询详情

// /v1/roles/{id}
export const api_roleInfo = async (id: string) => {
  return axios.get(`/roles/${id}`)
}

// 视频任务分析 - 接口
export const api_videosPage = async (data) => {
  return axios.get(`/videos/page?pageNum=${data.pageNum}&pageSize=${data.pageSize}`)
}


// 报警累计

export const api_getAlarmResultData = async () => {
  return axios.get(`/datas/day`)
}


// 根据ID查询信息
export const api_getUserInfo = async (id: string) => {
  return axios.get(`/users/${id}`)
}