
/**
 * Dependencies
 */

var mongoose = require('mongoose')
var _ = require('underscore')

var paginate = require('../utilities/paginate')

var Experiment = mongoose.model('Experiment')
var Tag = mongoose.model('Tag')
var Metric = mongoose.model('Metric')


/**
 * Expose
 */

exports.getTag = function (req, res) {
    Tag.findById(req.params.id)
    .populate({
        path: 'experiments',
        populate: { path: 'results.metric' }
    })
    .exec(function (err, tag) {
        if (err) { return res.status(500).json({ error: err }) }
        res.status(200).json(tag);
    })
}

exports.getTags = function (req, res) {
    Tag.find(function (err, tags) {
        if (err) { return res.status(500).json({ error: err }) }
        res.status(200).json(tags);
    })
}

exports.createTag = function (req, res) {
    var tag = new Tag(req.body)
    tag.save(function (err, tag) {
        if (err) { return res.status(500).json({ error: err }) }
        res.status(200).json(tag)
    })
}

exports.updateTag = function (req, res) {
    Tag.findById(req.params.id, function (err, tag) {

        var updates = _.pick(req.body, 'name')
        _.extend(tag, updates)

        tag.save(function (err, tag) {
            if (err) { return res.status(500).json({ error: err }) }
            res.status(200).json(tag)
        })
    })
}

exports.deleteTag = function (req, res) {
    
    // Note: Model.findByIdAndRemove won't trigger .pre("remove")
    // on model. Must use model.remove().

    Tag.findById(req.params.id, function (err, tag) {

        tag.remove(function (err) {
            if (err) { return res.status(500).json({ error: err }) }
            res.status(200).json(tag)
        })
    })
}



