mongoose = require "mongoose"
server = require "../server"
connectionDefault = server.connectionDefault
Schema = mongoose.Schema
RouteDef = require('./channels').RouteDef
ChannelDef = require('./channels').ChannelDef

exports.configParamTypes = [ 'string', 'bool', 'number', 'option', 'bigstring', 'map', 'struct', 'password' ]

exports.configDef = configDef =
  "param":        String
  "displayName":  String
  "description":  String
  "type":         type: String, enum: exports.configParamTypes
  "values":       [ type: String ]
  "template":     { type: Array }
  "array":        Boolean

# The properties prefixed with an '_' are internally used properties and shouldn't be set by the user
MediatorSchema = new Schema
  "urn":                    type: String, required: true, unique: true
  "version":                type: String, required: true
  "name":                   type: String, required: true
  "description":            String
  "endpoints":              [RouteDef]
  "defaultChannelConfig":   [ChannelDef]
  "configDefs":             [configDef]
  "config":                 Object
  "_configModifiedTS":      Date
  "_uptime":                Number
  "_lastHeartbeat":         Date

# Model for describing a collection of mediators that have registered themselves with core
exports.Mediator = connectionDefault.model 'Mediator', MediatorSchema
