package org.ccpit.business.phase;

import com.alibaba.fastjson.JSON;
import org.apache.commons.lang.StringUtils;
import org.ccpit.base.controller.BaseController;
import org.ccpit.base.controller.Page;
import org.ccpit.base.controller.PageRequest;
import org.ccpit.base.utils.MailSender;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Date: 2015年11月16日 09:59
 *
 * @author 孙其鹏
 * @version 1.0
 */
@Controller
@RequestMapping("/admin/business/phaseManage")
public class PhaseController extends BaseController {

    @Autowired
    private PhaseService phaseService;

    @RequestMapping("/page")
    public ModelAndView toPage(){
        ModelAndView mv = new ModelAndView("business/phaseListPage");
        return mv;
    }

    @RequestMapping("/query")
    @ResponseBody
    public Page<Phase> query(HttpServletRequest request,String name){
        PageRequest pr = getPage(request);
        if (StringUtils.isNotEmpty(name)){
            return phaseService.queryByPage(pr,"from Phase where name like '%"+name+"%'",null);
        }
        return phaseService.queryByPage(pr,"from Phase ",null);
    }

    @RequestMapping("/queryById/{id}")
    @ResponseBody
    public Phase queryById(@PathVariable Long id){
        return phaseService.queryById(id);
    }
    @RequestMapping("/deleteById")
    @ResponseBody
    public Object deleteById(HttpServletRequest request){
        String ids = request.getParameter("ids");
        List<Long> list = JSON.parseArray(ids, Long.class);
        boolean success = phaseService.deletePhases(list);
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("flag",success);
        return map;
    }

    @RequestMapping("/addOrUpdate")
    @ResponseBody
    public Object addOrUpdate(Phase phase,String operate,HttpServletResponse response){
        boolean success = false;
        if (StringUtils.isNotEmpty(operate)&&operate.equals("add")){
            phase.setActive(false);
            success = phaseService.add(phase);
        }else if (StringUtils.isNotEmpty(operate)&&operate.equals("edit")){
            Phase p = phaseService.queryById(phase.getId());
            p.setName(phase.getName());
            p.setTime(phase.getTime());
            success = phaseService.update(p);
        }
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("flag",success);
        map.put("info", success ? "保存成功" : "保存失败");
        try {
            response.getWriter().print("{flag:" + success + ",info:'" + (success?"保存成功":"保存失败")+"'}");
        } catch (IOException e) {

        }
        return null;
    }

    @RequestMapping("/active/{id}")
    @ResponseBody
    public Object active(@PathVariable Long id,HttpServletResponse response){
        Phase phase = phaseService.queryById(id);
        phase.setActive(true);
        Phase ap = phaseService.getActivePhase();
        if (ap!=null && !id.equals(ap.getId())){
            Map<String,Object> map = new HashMap<String, Object>();
            map.put("flag",false);
            map.put("info","已经有启动的期数,请先取消再启用新的");
            return map;
        }

        boolean success = phaseService.update(phase);

        Map<String,Object> map = new HashMap<String, Object>();
        map.put("flag",success);
        map.put("info",success?"启用成功":"启用失败");

        response.setHeader("expires","0");
        response.setHeader("cache-control","max-age=0");
        response.setHeader("Pragma","no-cache");
        return map;
    }

    @RequestMapping("/inActive/{id}")
    @ResponseBody
    public Object inActive(@PathVariable Long id){
        Phase phase = phaseService.queryById(id);
        phase.setActive(false);
        boolean success = phaseService.update(phase);

        Map<String,Object> map = new HashMap<String, Object>();
        map.put("flag",success);
        map.put("info",success?"关闭成功":"关闭失败");
        return map;
    }
}