/* ----------------------------------------------------------------------------

 Question Server
 GitLab: <https://gitlab.com/YourFriendlyNeighborhoodDealer/question-node-server>

 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program. If not, see <https://www.gnu.org/licenses/>.

 ------------------------------------------------------------------------- */

module.exports = {
  GetDateString: GetDateString,
  Log: Log,
  GetColor: GetColor,
  LogReq: LogReq
}

const DELIM = '|'

var utils = require('../utils/utils.js')
const nlogFile = '../stats/nlogs'
const locLogFile = '../stats/logs'
const logFile = '/nlogs/nlogs'
const allLogFile = '/nlogs/log'

function GetDateString () {
  var m = new Date()
  return m.getFullYear() + '/' +
		('0' + (m.getMonth() + 1)).slice(-2) + '/' +
		('0' + m.getDate()).slice(-2) + ' ' +
		('0' + m.getHours()).slice(-2) + ':' +
		('0' + m.getMinutes()).slice(-2) + ':' +
		('0' + m.getSeconds()).slice(-2)
}

function Log (s, c, b) {
  if (c != undefined) { console.log(c, GetDateString() + DELIM + s) } else { console.log(GetDateString() + DELIM + s) }

  if (b) { utils.Beep() }

  utils.AppendToFile(GetDateString() + DELIM + s, nlogFile)
  utils.AppendToFile(GetDateString() + DELIM + s, logFile)
}

function LogReq (req, toFile, sc) {
  try {
    var ip = req.headers['cf-connecting-ip'] || req.connection.remoteAddress
    var logEntry = ip + DELIM + req.hostname + DELIM + req.headers['user-agent'] +
			DELIM + req.method + DELIM

    logEntry += req.url

    if (sc != undefined && sc == 404) { logEntry += DELIM + sc }
    var color = GetColor('green')

    if (req.url.toLowerCase().includes('isadding')) { color = GetColor('yellow') }
    if (!toFile) {
      Log(logEntry, color)
    } else {
      var defLogs = GetDateString() + DELIM + logEntry
      var extraLogs = '\n\t' + JSON.stringify(req.headers) + '\n\t' + JSON.stringify(req.body) + '\n'

      utils.AppendToFile(defLogs, locLogFile)
      utils.AppendToFile(defLogs, allLogFile)
    }
  } catch (e) {
    console.log(e)
    Log('Error at logging lol', GetColor('redbg'), true)
  }
}

function GetColor (c) {
  if (c == 'redbg') { return '\x1b[41m%s\x1b[0m' }
  if (c == 'bluebg') { return '\x1b[44m%s\x1b[0m' }
  if (c == 'red') { return '\x1b[31m%s\x1b[0m' }
  if (c == 'green') { return '\x1b[32m%s\x1b[0m' }
  if (c == 'yellow') { return '\x1b[33m%s\x1b[0m' }
  if (c == 'blue') { return '\x1b[34m%s\x1b[0m' }
  if (c == 'cyan') { return '\x1b[36m%s\x1b[0m' }
}