package com.starcharge.component.datastore;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ihidea.core.support.SpringContextLoader;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

//@WebServlet(urlPatterns = "/download/*", loadOnStartup = 2)
public class FileServlet extends HttpServlet {

	protected Log logger = LogFactory.getLog(FileServlet.class);

	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		String id = request.getPathInfo().substring(1);

		String fileId = id, fileImgSize = null, downloadFlag = null, mineType = null;

		if (StringUtils.isNotBlank(id)) {

			// 兼容编码后的参数,主要是七牛云
			// ae1f7c89-7e7e-4a29-a284-1c8c284b1e0e?fileImgSize=20x20
			if (id.indexOf("?") > 0) {
				fileId = id.substring(0, id.indexOf("?"));

				int _i = -1;
				if ((_i = id.indexOf("fileImgSize=")) > 0) {
					int _j = id.indexOf("&", _i);
					fileImgSize = id.substring(_i + "fileImgSize=".length(), _j == -1 ? id.length() : _j);
				}

				if ((_i = id.indexOf("downloadFlag=")) > 0) {
					int _j = id.indexOf("&", _i);
					downloadFlag = id.substring(_i + "downloadFlag=".length(), _j == -1 ? id.length() : _j);
				}

				if ((_i = id.indexOf("mineType=")) > 0) {
					int _j = id.indexOf("&", _i);
					mineType = id.substring(_i + "mineType=".length(), _j == -1 ? id.length() : _j);
				}

			} else {

				fileImgSize = request.getParameter("fileImgSize");

				downloadFlag = request.getParameter("downloadFlag");

				mineType = request.getParameter("mineType");
			}

		} else {
			response.sendError(404);
			return;
		}

		FileController fileController = SpringContextLoader.getBean(FileController.class);

		try {
			fileController.download(request, response, fileId, downloadFlag, fileImgSize, mineType);
		} catch (Exception e) {
			logger.error(e.getMessage(), e);
		}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

	public void destroy() {
	}

	public void init() throws ServletException {
	}

}