var TypedError = require("error/typed")

var parseArguments = require("./parse-arguments.js")
var jsonBody = require("./json.js")
var formBody = require("./form.js")

var jsonType = "application/json"
var formType = "application/x-www-form-urlencoded"
var INVALID_CONTENT_TYPE = TypedError({
    message: "Could not parse content type header: {contentType}",
    type: "invalid.content.type",
    statusCode: 415,
    contentType: null
})

module.exports = anyBody

function anyBody(req, res, opts, callback) {
    var args = parseArguments(req, res, opts, callback)
    req = args.req
    res = args.res
    opts = args.opts
    callback = args.callback

    if (!callback) {
        return anyBody.bind(null, req, res, opts)
    }

    var contentType = req.headers["content-type"] || ""

    if (contentType.indexOf(jsonType) !== -1) {
        jsonBody(req, res, opts, callback)
    } else if (contentType.indexOf(formType) !== -1) {
        formBody(req, res, opts, callback)
    } else {
        callback(INVALID_CONTENT_TYPE({contentType: contentType}))
    }
}