import ActionCable from 'actioncable'
// import { scrollLastMessageIntoView } from './chatrooms'
// create App object with key cable == new cosumer
(function() {
  window.App || (window.App = {});

  App.cable = ActionCable.createConsumer();

}).call(this);

// find chatroom id
const chatroomId = document.getElementById('chatroom-hook').dataset["chatroomId"]
const userId = document.getElementById('current-user').innerText
console.log(userId)

// create subsciptions
App['chatroom' + chatroomId] = App.cable.subscriptions.create({
    channel: 'ChatRoomsChannel',
    room: chatroomId
  }, {
    connected: () => {},
    received: data => {
      if (data["chat_message"] && data["chat_message"]["userId"] == userId) {
        const chatMessage = data["chat_message"]
        const message = `${chatMessage["message"]}`
        const messagesContainer = document.getElementById('messages-container')

        // Div Settings
        const messageDiv = document.createElement("div")
        messageDiv.classList.add("messageDiv")
        messageDiv.classList.add("right")

        // Photo Settings
        const photo = document.createElement("img")
        photo.src = chatMessage["photo_url"]
        photo.classList.add("img-circle")
        photo.classList.add("avatar-sm")
        photo.classList.add("margin-left")

        // Text Settings
        const messageElement = document.createElement("p")
        messageElement.classList.add("message")
        messageElement.classList.add("no-margin")
        messageElement.innerText = message

        // Add message and photo to div
        messageDiv.appendChild(photo)
        messageDiv.appendChild(messageElement)

        // Add message to container
        messagesContainer.appendChild(messageDiv)

      } else if (data["chat_message"] && data["chat_message"]["userId"] != userId) {
        const chatMessage = data["chat_message"]
        const target = document.getElementById('language-1').value
        const message = `${chatMessage["message"]}`

        fetch(`/chat_rooms/${chatroomId}/translate_message` , {
          method: 'POST',
          body: JSON.stringify({
            message: message,
            target: target,
            userId: userId,
            photo_url: chatMessage["photo_url"]
          }),
          headers: { "content-type": "application/json", "X-CSRF-Token": document.querySelector('meta[name=csrf-token]').content }
        })
      } else if (data["translated_message"] && data["userId"] == userId) {
          const messagesContainer = document.getElementById('messages-container')

          const messageDiv = document.createElement("div")
          messageDiv.classList.add("messageDiv")

          const photo = document.createElement("img")
          photo.src = data["photo_url"]
          photo.classList.add("img-circle")
          photo.classList.add("avatar-sm")
          photo.classList.add("margin-right")

          const messageElement = document.createElement("p")
          messageElement.classList.add("message")
          messageElement.classList.add("no-margin")
          messageElement.innerText = data["translated_message"]
          messageElement.setAttribute('data-original', `${data["original_message"]}`)
          messageElement.setAttribute('data-translated', `${data["translated_message"]}`)

          messageDiv.appendChild(photo)
          messageDiv.appendChild(messageElement)

          messageDiv.addEventListener('mouseover', event => {
            messageElement.innerText = data["original_message"]
          })
          messageDiv.addEventListener('mouseout', event => {
            messageElement.innerText = data["translated_message"]
          })

          messagesContainer.appendChild(messageDiv)
      } else {
        // console.log(data)
      }
      if (data.hangUp) {
        document.location.pathname = '/contacts'
      }
    },
    disconnected: () => {
      document.location.pathname = '/contacts'
    }
})

const hangUpIcon = document.querySelector('.fa-hand-paper')
hangUpIcon.addEventListener('click', event => {
  fetch(`/chat_rooms/${chatroomId}`, {
    method: 'DELETE',
    headers: {
      'X-CSRF-Token': document.querySelector('meta[name=csrf-token]').content
    }
  })
  document.location.pathname = '/contacts'
})

// Testing ActionCable
// const testBtn = document.getElementById('test-btn')
// testBtn.addEventListener('click', event => {
//   fetch(`/chat_rooms/${chatroomId}/cable_testing` , {
//     method: 'POST',
//     body: JSON.stringify({})
//   })
// })

const originalBtn = document.getElementById('original-btn')
originalBtn.addEventListener('click', event => {
  originalBtn.classList.toggle('original')
  const allMessages = document.querySelectorAll('.messageDiv:not(.right) > p')

  if (originalBtn.classList.contains('original')) {
    originalBtn.innerText = "Show Original"
    allMessages.forEach(message => {
      message.innerText = message.dataset.translated
    })
  } else {
    originalBtn.innerText = "Show Translated"
    allMessages.forEach(message => {
      message.innerText = message.dataset.original
    })
  }
})

const sendBtn = document.getElementById('send-btn')
sendBtn.addEventListener('click', event => {
  const chatInput = document.getElementById('chat-input')
  if (chatInput && chatInput.value != chatInput.value.match(/^\s*$/g)) {
    fetch(`/chat_rooms/${chatroomId}/send_message` , {
      method: 'POST',
      body: JSON.stringify({message: chatInput.value, userId: userId}),
      headers: { "content-type": "application/json", "X-CSRF-Token": document.querySelector('meta[name=csrf-token]').content }
    })
  }
  chatInput.value = ""
})