package com.fadu.jeefw.controller.lawyer;

import com.fadu.app.util.SystemCache;
import com.fadu.core.support.ExtJSBaseParameter;
import com.fadu.core.support.JqGridPageView;
import com.fadu.core.support.QueryResult;
import com.fadu.core.util.BeanUtils;
import com.fadu.jeefw.core.Constant;
import com.fadu.jeefw.core.JavaEEFrameworkBaseController;
import com.fadu.jeefw.model.web.LawyerCaseVO;
import com.fadu.jeefw.service.lawer.LawyerCaseService;
import com.fadu.model.lawyer.LawyerCase;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 律师的控制层
 */
@Controller
@RequestMapping("/sys/lawyercase")
public class LawyerCaseController extends JavaEEFrameworkBaseController<LawyerCaseVO> implements Constant {

	@Autowired
	private LawyerCaseService lawyercaseService;

	//hql分页例子
	@RequestMapping(value = "/getHqlLawyer", method = { RequestMethod.POST, RequestMethod.GET })
	public void getHqlLawyer(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		// Integer page=Integer.valueOf(request.getParameter("page"));
		Integer rows=Integer.valueOf(request.getParameter("rows"));
		Integer firstResult = 0;
		Integer maxResults =rows;
		String sortedObject = request.getParameter("sidx");
		String sortedValue = request.getParameter("sord");
		
		List<String> whereCondition = new ArrayList<String>();
		String address = request.getParameter("address");
		if (StringUtils.isNotBlank(address)) {
			whereCondition.add(" address like '%"+address+"%'");
		}
		String mobile = request.getParameter("mobile");
		if (StringUtils.isNotBlank(mobile)) {
			whereCondition.add(" mobile  like '%"+mobile+"%'");
		}
		String office = request.getParameter("office");
		if (StringUtils.isNotBlank(office)) {
			whereCondition.add("  office like '%"+office+"%'");
		}
		String realName = request.getParameter("realName");
		if (StringUtils.isNotBlank(realName)) {
			whereCondition.add(" realName like '%"+realName+"%'");
		}
		Map<String, String> sortedCondition = new HashMap<String, String>();
		sortedCondition.put(sortedObject, sortedValue);
		QueryResult<LawyerCase> queryResult = lawyercaseService.doPaginationQuery(whereCondition,sortedCondition,firstResult,maxResults);
		
		
		JqGridPageView<LawyerCase> lawyerListView = new JqGridPageView<LawyerCase>();
		lawyerListView.setMaxResults(maxResults);
		/*List<LawyerCaseVO> lawyerWithSubList = lawyercaseService.queryLawyerWithSubList(queryResult.getResultList());
		lawyerListView.setRows(lawyerWithSubList);
		lawyerListView.setRecords(queryResult.getTotalCount());
		*/
		/*ListView<Company> forestryListView = new ListView<Company>();
		forestryListView.setData(queryResult.getResultList());
		forestryListView.setTotalRecord(queryResult.getTotalCount());*/
		
		writeJSON(response, lawyerListView);
	}
	
	// 查询律师的表格,包括分页、搜索和排序
	@RequestMapping(value = "/getLawyer", method = { RequestMethod.POST, RequestMethod.GET })
	public void getLawyer(HttpServletRequest request, HttpServletResponse response) throws Exception {
		Integer firstResult = Integer.valueOf(request.getParameter("page"));
		Integer maxResults = Integer.valueOf(request.getParameter("rows"));
		String sortedObject = request.getParameter("sidx");
		String sortedValue = request.getParameter("sord");
		String filters = request.getParameter("filters");
		LawyerCaseVO lawyervo = new LawyerCaseVO();
		if (StringUtils.isNotBlank(filters)) {
			JSONObject jsonObject = JSONObject.fromObject(filters);
			JSONArray jsonArray = (JSONArray) jsonObject.get("rules");
			for (int i = 0; i < jsonArray.size(); i++) {
				JSONObject result = (JSONObject) jsonArray.get(i);
		/*		if (result.getString("field").equals("mobile") && result.getString("op").equals("eq")) {
					lawyervo.set$eq_mobile(result.getString("data"));
				}
				if (result.getString("field").equals("realName") && result.getString("op").equals("cn")) {
					lawyervo.set$like_realName(result.getString("data"));
				}*/
			}
			if (((String) jsonObject.get("groupOp")).equalsIgnoreCase("OR")) {
				lawyervo.setFlag("OR");
			} else {
				lawyervo.setFlag("AND");
			}
		}
		
		lawyervo.setFirstResult((firstResult - 1) * maxResults);
		lawyervo.setMaxResults(maxResults);
		Map<String, String> sortedCondition = new HashMap<String, String>();
		sortedCondition.put(sortedObject, sortedValue);
		lawyervo.setSortedConditions(sortedCondition);
		QueryResult<LawyerCase> queryResult = lawyercaseService.doPaginationQuery(lawyervo);
		JqGridPageView<LawyerCaseVO> lawyerListView = new JqGridPageView<LawyerCaseVO>();
		lawyerListView.setMaxResults(maxResults);
		List<LawyerCaseVO> lawyerWithSubList = lawyercaseService.queryLawyerWithSubList(queryResult.getResultList());
		lawyerListView.setRows(lawyerWithSubList);
		lawyerListView.setRecords(queryResult.getTotalCount());
		writeJSON(response, lawyerListView);
	}

	// 保存律师的实体Bean
	@Override
	@RequestMapping(value = "/saveLawyer", method = { RequestMethod.POST, RequestMethod.GET })
	public void doSave(LawyerCaseVO vo, HttpServletRequest request, HttpServletResponse response) throws IOException {
		ExtJSBaseParameter parameter = (vo);
		if (CMD_EDIT.equals(parameter.getCmd())) {
			LawyerCase entity = lawyercaseService.get(vo.getId());

			
			lawyercaseService.update(entity);
		} else if (CMD_NEW.equals(parameter.getCmd())) {
			LawyerCase entity = new LawyerCase();
			try {
				BeanUtils.copyProperties(entity, vo);
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				e.printStackTrace();
			}
			lawyercaseService.createLawyer(entity);
		}
		parameter.setSuccess(true);
		writeJSON(response, parameter);
	}

	// 操作律师的删除、导出Excel、字段判断和保存
	@RequestMapping(value = "/operateLawyer", method = { RequestMethod.POST, RequestMethod.GET })
	public void operateLawyer(LawyerCaseVO vo, HttpServletRequest request, HttpServletResponse response) throws Exception {
		String oper = request.getParameter("oper");
		String id = request.getParameter("id");
		if (oper.equals("del")) {
			String[] ids = id.split(",");
			deleteLawyer(request, response, ids);
		} else if (oper.equals("excel")) {
			response.setContentType("application/msexcel;charset=UTF-8");
			OutputStream out = null;
			try {
				response.addHeader("Content-Disposition", "attachment;filename=file.xls");
				out = response.getOutputStream();
				out.write(URLDecoder.decode(request.getParameter("csvBuffer"), "UTF-8").getBytes());
				out.flush();
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
				if(out!=null){
					out.close();
				}
			}
		} else {
			Map<String, Object> result = new HashMap<String, Object>();
			
//			Lawyer mobileLawyer = lawyerService.getByProerties("mobile", vo.getMobile());
			
				if (oper.equals("edit")) {
					vo.setCmd("edit");
					doSave(vo, request, response);
				} else if (oper.equals("add")) {
					vo.setCmd("new");
					doSave(vo, request, response);
				}
		}
	}

	// 删除律师
	@RequestMapping("/deleteLawyer")
	public void deleteLawyer(HttpServletRequest request, HttpServletResponse response, @RequestParam("ids") String[] ids) throws IOException {
		boolean flag = lawyercaseService.deleteByPK(ids);
		if (flag) {
			writeJSON(response, SUCCESS_TRUE);
		} else {
			writeJSON(response, SUCCESS_FAlSE);
		}
	}
	
	// 获取律师状态的下拉框
	@RequestMapping(value = "/getLawyerStatusSelectList", method = { RequestMethod.POST, RequestMethod.GET })
	public void getLawyerStatusSelectList(HttpServletRequest request, HttpServletResponse response) throws Exception {
		List<LawyerCase> departmentList = lawyercaseService.doQueryAll();
		StringBuilder builder = new StringBuilder();
		builder.append("<select>");
		/*for (int i = 0; i < departmentList.size(); i++) {
			builder.append("<option value='" + departmentList.get(i).getStatus() + "'>" + departmentList.get(i).getStatusName() + "</option>");
		}*/
		builder.append("<option value='" + 0+ "'>" + "注册"+"</option>");
		builder.append("<option value='" + 1+ "'>" + "已经完善资料"+"</option>");
		builder.append("<option value='" + 2+ "'>" + "认证审核中"+"</option>");
		builder.append("<option value='" + 3+ "'>" + "认证审核失败"+"</option>");
		builder.append("<option value='" + 4+ "'>" + "认证成功"+"</option>");
		builder.append("</select>");
		writeJSON(response, builder.toString());
	}
	// 获取律师状态的下拉框
	@RequestMapping(value = "/getLawyerByid", method = { RequestMethod.POST, RequestMethod.GET })
	public void getLawyerByid(HttpServletRequest request, HttpServletResponse response) throws Exception {
		String lawyerid=request.getParameter("lawyerid");
		if(!StringUtils.isEmpty(lawyerid)){
			LawyerCase lawyer=	lawyercaseService.getByProerties("id", lawyerid);
			if(null!=lawyer){
				writeJSON(response, lawyer);
			}
		}
	}
	
	@ResponseBody
	@RequestMapping(value = "/getCaseTypes")
	public  Map<String, String> getCaseTypes(){		
		return SystemCache.caseTypeMap;
	}
}