import { state } from '@/state';
import dayjs from 'dayjs';
import request from '/src/utils/request';

/** 错误信息列表 */
export const api_sysExceptionLogSave = (params: any): Promise<any> => {
  return request.post('/edu-app/sysExceptionLog/save', {
    data: params
  });
};

type uploadType = {
  clientType?: string;
  phone?: string | undefined | null;
  userAgent?: string;
  appType?: string;
  content?: string;
  exceptionType?: string;
  exceptionTime?: string;
  deviceType?: string | null;
  deviceVersion?: string | null;
};

/**
 * 页面有报错时上传错误日志
 * @params
 */
export default function useErrorLog() {
  const _whiteBlanks = [
    '/classroom/login',
    '/classroom/',
    '/classroom/Home',
    '/classroom/prepare-lessons',
    '/classroom/classDetail',
    '/classroom/classStudentDetail',
    '/classroom/studentDetail',
    '/classroom/afterWorkDetail',
    '/classroom/classStudentRecode',
    '/classroom/xiaoku-list',
    '/classroom/xiaoku-music',
    '/classroom/natural-resources',
    '/classroom/notation',
    '/classroom/content-instruments-detail',
    '/classroom/content-music-detail',
    '/classroom/homework-record-detail',
    '/classroom/attend-class'
  ];

  let _defaultParams = {
    clientType: 'TEACHER',
    phone: '',
    userAgent: '',
    appType: 'WEB',
    content: '',
    exceptionType: 'ERROR',
    exceptionTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
    deviceType: null,
    deviceVersion: null
  };

  const _uploadErrorLog = async (event: any) => {
    try {
      state.user.data.phone;

      /*
        日志上报：1.手机号、应用端 iOS｜安卓 App类型（老师端｜学生端｜web）、App版本、系统信息（系统版本｜web userAgent）、错误信息（什么位置出现，错误内容） 错误时间 上报类型（错误、埋点）
        Phone、 type 、content
        手机号｜上报类型 （error、record）｜content 内容jsonString （应用端 iOS｜安卓 App类型（老师端｜学生端｜web）、App版本、系统信息（系统版本｜web userAgent）、错误信息（什么位置出现，错误内容） 错误时间）

        手机号 ｜上报类型 ｜业务平台｜应用端（iOS｜安卓）｜
     */
      const href = window.location.href;
      const index = _whiteBlanks.findIndex(
        (item: string) => href.indexOf(item) !== -1
      );

      const whiteIp = [
        'kt.colexiu.com',
        'test.kt.colexiu.com',
        'dev.kt.colexiu.com'
      ];
      console.log(window.location.hash, index, 'errorLog');
      if (!whiteIp.includes(window.location.host)) {
        return;
      }
      if (!(window.location.hash === '#/' || index !== -1)) {
        return;
      }
      // 错误信息
      // 资源加载失败，可以在这里处理错误
      const contentError = `Error message: ${event.target.tagName || ''}；${
        event.target.src || event.target.href || ''
      }；lineno: ${event.lineno || ''}；message: ${
        event.message || ''
      }；filename: ${event.filename || ''}；fileUrl: ${window.location.href}`;

      const params = [
        {
          ..._defaultParams,
          phone: state.user.data?.phone,
          userAgent: window.navigator.userAgent,
          content: contentError,
          exceptionTime: dayjs().format('YYYY-MM-DD HH:mm:ss')
        }
      ];
      // console.log(params);
      await api_sysExceptionLogSave(params);
    } catch {
      //
    }
  };
  /**
   * 开始监听错误日志并上传
   */
  const startListenErrorLog = (params?: uploadType) => {
    _defaultParams = Object.assign(_defaultParams, params);
    console.log('mount useErrorLog');
    window.addEventListener('error', _uploadErrorLog);
  };

  /**
   * 停止监听
   */
  const stopListenErrorLog = () => {
    window.removeEventListener('error', _uploadErrorLog);
  };

  return {
    startListenErrorLog,
    stopListenErrorLog
  };
}
