## Input Parameters
# PORT to start API
PORT <- input[[1]]
# Working DIrectory
workingDirectory <- input[[2]]
# library path
libPath <- input[[3]]
# library path
memoryLimit <- input[[4]]
# API timeout
timeout <- input[[5]]

# Set working directory
setwd(workingDirectory);

source('fn.common.utilities.R')

options( digits = 22 )

library('jsonlite')

#. user configuaration path
configPath <- file.path(rappdirs::user_data_dir("opencpu"), "user.conf")

#. method to generate the OPEN CPU config file
createUserConfig <- function(){
    defaultConfFile <- system.file("config/defaults.conf", package = 'opencpu');
    if(file.exists(defaultConfFile)){
        default_configuration <- fromJSON(readLines(defaultConfFile))
        default_configuration$timelimit.post <- as.numeric(timeout)

        dir.create(dirname(configPath), showWarnings = FALSE, recursive = TRUE)

        userConfigJSON <- toJSON(default_configuration,auto_unbox=TRUE,pretty=TRUE,force=TRUE,digits=22)
        write(userConfigJSON, configPath)
    }
}

#. update the time limit in the config file
if(file.exists(configPath)) {
    if(validate(readLines(configPath))){
        server_configuration <- fromJSON(readLines(configPath))
        server_configuration$timelimit.post <- as.numeric(timeout)
        configJSON <- toJSON(server_configuration,auto_unbox=TRUE,pretty=TRUE,force=TRUE,digits=22)
        write(configJSON, configPath)
    } else {
        createUserConfig()
    }
} else {
    createUserConfig()
}

# load packages
load.packages(c('mde', 'opencpu'), libPath)

# set initial configurations like memory limit, locale
set.configurations(as.numeric(memoryLimit))

# ocpu_start_server(port = PORT, root = "/ocpu", workers = 2, preload = NULL, on_startup = NULL, no_cache = FALSE)

ocpu_start_server(port = PORT, root ="/ocpu", workers = 2, preload = 'mde', on_startup = NULL, no_cache = FALSE)
