
local response = require "wsapi.response"

local _M = {}

function _M.run(wsapi_env)
	_G.CGILUA_APPS = _G.CGILUA_APPS or wsapi_env.DOCUMENT_ROOT .. "/cgilua"
	_G.CGILUA_CONF = _G.CGILUA_CONF or wsapi_env.DOCUMENT_ROOT .. "/cgilua"
	_G.CGILUA_TMP = _G.CGILUA_TMP or os.getenv("TMP") or os.getenv("TEMP") or "/tmp"
	_G.CGILUA_ISDIRECT = true
	
	local res = response.new()

	_G.SAPI = {
		Info =  {
			_COPYRIGHT = "Copyright (C) 2007 Kepler Project",
			_DESCRIPTION = "WSAPI SAPI implementation",
			_VERSION = "WSAPI SAPI 1.0",
			ispersistent = false,
		},
		Request = {
			servervariable = function (name) return wsapi_env[name] end,
			getpostdata = function (n) return wsapi_env.input:read(n) end
		},
		Response = {
			contenttype = function (header)
				res:content_type(header)
			end,
			errorlog = function (msg, errlevel)
				wsapi_env.error:write (msg)
			end,
			header = function (header, value)
				if res.headers[header] then
					if type(res.headers[header]) == "table" then
						table.insert(res.headers[header], value)
					else
						res.headers[header] = { res.headers[header], value }
					end
				else
					res.headers[header] = value
				end
			end,
			redirect = function (url)
				res.status = 302
				res.headers["Location"] = url
			end,
			write = function (...)
				res:write({...})
			end,
		},
	}
	local cgilua = require"cgilua"
	if cgilua.main() == false then
		res.status = 500
	end
	return res:finish()
end

return _M