---
--- Generated by MLN Team (https://www.immomo.com)
--- Created by MLN Team.
--- DateTime: 15-01-2020 17:35
---

---
---  网络请求工具类
---
---@note  网络使用的cache策略请参考[CachePolicy](CachePolicy)
---		网络请求的加密策略请参考[EncType](EncType)
---		网络响应体中相关key请参考[ResponseKey](ResponseKey)
---		网络错误信息中相关key请参考[ErrorKey](ErrorKey)
---@class Http @parent class
---@public field name string 
---@type Http
local _class = {
	_priveta_class_name = "Http"}

---
---  创建Http实例对象，用于网络请求
---
---@return Http 
function Http()
	return _class
end

---
---  配置根地址，可以避免每次都拼接重复的基础地址
---
---@param baseURL string  根地址
---@return Http 返回http对象本身
---@note  目前不支持使用此方法设置BaseUrl，如需设置baseUrl，可继承Http在协议方法中自行实现
function _class:setBaseUrl(baseURL)
	return self
end

---
---  为缓存策略添加过滤参数
---
---
---  在使用缓存策略时，有些参数会影响缓存的命中率（eg，地理位置参数实时变更，
---		可能会导致无法命中缓存)，可以使用该方法过滤
---
---@param filterKey string  缓存策略CachePolicy
---@return Http 返回http对象本身
---@note  具体的cache策略请参考[CachePolicy](CachePolicy)
function _class:addCachePolicyFilterKey(filterKey)
	return self
end

---
---  发起GET请求
---
---@param url string  url地址，如果设置了BaseURL可以只填写path
---@param param Map  请求使用到的所有参数，可以是Map
---@param callback fun(success:boolean, response:Map, error:Map):void
---	 网络结果回调方法，格式为：
---		```
---		function(success, response, error)
---			--- success为boolean，请求是否成功
---			--- response为Map，网络响应数据
---			--- error为Map，请求失败的信息
---		end
---		```
---@return Http 返回http对象本身
---@note  url必须去掉host，host必须通过setBaseUrl设置
function _class:get(url, param, callback)
	return self
end

---
---  发起POST请求
---
---@param url string  url地址，如果设置了BaseURL可以只填写path
---@param param Map  请求使用到的所有参数，可以是Map
---@param callback fun(success:boolean, response:Map, error:Map):void
---	 网络结果回调方法，格式为：
---		```
---		function(success, response, error)
---			--- success为boolean，请求是否成功
---			--- response为Map，网络响应数据
---			--- error为Map，请求失败的信息
---		end
---		```
---@return Http 返回http对象本身
---@note  url必须去掉host，host必须通过setBaseUrl设置
function _class:post(url, param, callback)
	return self
end

---
---  下载数据请求
---
---@param url string  url地址，如果设置了BaseURL可以只填写path
---@param param Map  请求使用到的所有参数，可以是Map
---@param callback fun(progress:number, total:number):void
---	 下载进度回调，格式为：
---		```
---		function(number progress, number total)
---			--- progress:当前的进度
---			--- total:文件总长度
---		end
---		```
---@param callback fun(success:boolean, response:Map, error:Map):void
---	 网络结果回调方法，格式为：
---		```
---		function(success, response, error)
---			--- success为boolean，请求是否成功
---			--- response为Map，网络响应数据
---			--- error为Map，请求失败的信息
---		end
---		```
---@return Http 返回http对象本身
---@note  url必须去掉host，host必须通过setBaseUrl设置
function _class:download(url, param, callback, callback)
	return self
end

---
---  上传数据请求
---
---@param url string  url地址，如果设置了BaseURL可以只填写path
---@param param Map  请求使用到的所有参数，可以是Map
---@param filePaths Array  文件路径数组
---@param fileNames Array  文件名字数组
---@param callback fun(success:boolean, response:Map, error:Map):void
---	 网络结果回调方法，格式为：
---		```
---		function(success, response, error)
---			--- success为boolean，请求是否成功
---			--- response为Map，网络响应数据
---			--- error为Map，请求失败的信息
---		end
---		```
---@return Http 返回http对象本身
function _class:upload(url, param, filePaths, fileNames, callback)
	return self
end

return _class