'use strict'

/** @type {typeof import('@adonisjs/lucid/src/Lucid/Model')} */
const Model = use('Model')
const uuidv4 = require('uuid').v4;
const crypto = require('crypto')

class IceServer extends Model {
  toJSON() {
    const json = {};
    if (this.type === 'STUN') {
      json.urls = `stun:${this.url}:${this.port}`;
    } else {
      json.urls = '';
      json.username = `${Math.ceil(Date.now() / 1000)}:${uuidv4()}`
      json.credential = this.getCredentials(json.username);
      if (this.protocol === 'UDP') {
        json.urls = `turn:${this.url}:${this.port}?transport=udp`;
      } else if (this.protocol === 'TCP') {
        json.urls = `turn:${this.url}:${this.port}?transport=tcp`;
      }
    }
    return json;
  }

  getCredentials(username) {
    return crypto.createHmac('sha1', this.secret)
        .update(username)
        .digest('base64');
  }
}

module.exports = IceServer
