import { UserModel } from "../model/UserModel";
import { ChatModel } from "../model/ChatModel";
import { UserView } from "../view/UserView";
import { ChatView } from "../view/ChatView";
import { UserController } from "../controller/UserController";
import { ChatController } from "../controller/ChatController";
import { Client } from "@stomp/stompjs";
import { ChatMessageDTO } from "../../common/dto/ChatMessageDTO";
import log from "loglevel";
import { ChatMessageViewModel } from "../viewmodel/ChatMessageViewModel";

export interface Props {
  //   userModel: UserModel;
  //   chatModel: ChatModel;
  //   userView: UserView;
  //   chatView: ChatView;
  userController: UserController;
  chatController: ChatController;
  chatStompClient: Client;
}

export interface State {}

export class ChatComponent {
  private readonly _props: Props;
  private readonly _state: State;

  constructor(props: Props, state: State) {
    this._props = props;
    this._state = state;
  }

  private async wsHandler() {
    this._props.chatStompClient.onConnect = () => {
      this._props.chatStompClient.subscribe("/user/queue/reply", (reply) => {
        const data = JSON.parse(reply.body) as ChatMessageDTO;
        const plainText = this._props.userController.decryptForUser(
          data,
          data.fromUser
        );
        this._props.chatController.store(data.fromUser, <ChatMessageViewModel>{
          ...data,
          message: plainText,
          messageTime: new Date(data.messageTime),
        });
        // log.debug(
        //   message,
        //   this._props.encryptionService.decrypt(
        //     "password",
        //     message.messageCipher
        //   )
        // );
      });
    };
  }
}
