/*
 * Tugas Besar 3 WBD - AMEN
 */

'use strict'

const express = require('express')

const db = require('../service/db')
const cloud = require('../service/cloud')
const relay = require('../service/relay')

let app = express.Router()

// Administration.

app.post('/init', async function (req, res, next) {
  let id = Number(req.projek.driver.id)
  let token = req.body.token

  try {
    cloud.register(id, token)

    let model = await db.ChatHistory.prepareAsync([id, relay.get(id)])

    res.json({
      chats: model.chats.map(chat => {
        return {
          from: chat.owner_id === id ? 'me' : 'them',
          text: chat.content
        }
      })
    })
  } catch (e) {
    next(e)
  }
})

app.delete('/', function (req, res) {
  let id = Number(req.projek.driver.id)

  cloud.unregister(id)
  relay.disassociate(id)

  res.json({})
})

// Messaging.

app.post('/', async function (req, res, next) {
  let id = Number(req.projek.driver.id)
  let message = req.body.message

  try {
    let model = await db.ChatHistory.prepareAsync([id, relay.get(id)])

    model.chats.push({
      owner_id: id,
      content: message
    })

    await relay.sendAsync(id, message)
    await model.save()

    res.json({})
  } catch (e) {
    next(e)
  }
})

module.exports = app