import { Config, Provide, Scope, ScopeEnum } from '@midwayjs/decorator';
import { InjectEntityModel } from '@midwayjs/orm';
import { CoolSocket, SocketEnvent } from '@cool-midway/socket';
import { Socket } from 'socket.io';
// import { ChatUserEntity } from '../entity/user';
import { Repository } from 'typeorm';

import * as jwt from 'jsonwebtoken';

/**
 * socket的事件
 */
@Provide()
@Scope(ScopeEnum.Singleton)
@CoolSocket() // 支持设置命名空间 如：@CoolSocket('/test') 
export class SocketHandler {
  // 获得模块的配置信息
  @Config('module.chat.jwt')
  jwtConfig;

  public clients: Map<String, Socket>;

//   @InjectEntityModel(ChatUserEntity)
//   chatUserEntity: Repository<ChatUserEntity>;

  /**
   * 连接成功
   * @param data
   */
  @SocketEnvent()
  async connection(socket: Socket) {
    // console.log('socket事件', socket.id, socket.handshake.query);
    // console.log('socket事件', socket.id, socket.handshake);
    console.log(socket);
    this.clients.set(socket.id, socket)
    const { token } = socket.handshake.query;
    console.log('-----------------------------------------------------------------------------------------------------------------------')
    console.log(token)
    // let tokenInfo;
    // try {
    //   // eslint-disable-next-line @typescript-eslint/ban-ts-comment
    //   // @ts-ignore
    //   tokenInfo = jwt.verify(token, this.jwtConfig.secret);
    // } catch (error) {
    //   // 如果验证不通过则断开连接
    //   socket.emit('comm', '校验失效');
    //   socket.disconnect();
    //   return;
    // }
    socket.on('disconnect', eventSocket => {
      this.clients.delete(socket.id)
      console.log('断开连接');
    });


    socket.on('msg', msg => {
      console.log('客户端消息', msg);
      socket.emit('data', 're:'+msg.op +" "+ msg.deviceid)

    });

    socket.on('devicelog',msg => {
      //解析终端上报的状态消息
      
      //入库
      
      //推送到前端
      socket.broadcast.emit('');
    });

  }

  /**
   * 连接成功
   * @param data
   */
   @SocketEnvent()
   async broadcast(socket: Socket) {
       
       //推送到前端
       socket.broadcast.emit('');
 
   }

}