package cn.efunbox.audio.controller;

import cn.efunbox.audio.entity.Channel;
import cn.efunbox.audio.entity.Device;
import cn.efunbox.audio.entity.Grouping;
import cn.efunbox.audio.service.ChannelService;
import cn.efunbox.audio.service.DeviceService;
import cn.efunbox.audio.utils.ApiCode;
import cn.efunbox.audio.utils.HttpUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by yao on 17-9-26.
 */
@RestController
@Slf4j
@RequestMapping(value = "/device")
public class DeviceController {

    @Autowired
    DeviceService deviceService;

    @Autowired
    ChannelService channelService;

    @RequestMapping(value = "/token" ,method = RequestMethod.POST)
    public Map Login(@RequestParam long id, @RequestParam String token){
        Map map = new HashMap<>();
        Device device = deviceService.Login(id, token);
        if(device==null){
            map.put("code", ApiCode.INVALID_TOKEN.getCode());
            map.put("msg", ApiCode.INVALID_TOKEN.getMessage());
            return map;
        }

        map.put("code", ApiCode.OK.getCode());
        Map data = new HashMap<>();
        data.put("id", device.getId());
        data.put("token", device.getTokenNew());
        map.put("data", data);

        return map;
    }

    @RequestMapping(value = "/register" ,method = RequestMethod.POST)
    public Map Register(HttpServletRequest request){
        Map map = new HashMap<>();
        String idChannel = request.getParameter("idChannel");
        String idDevice = request.getParameter("idDevice");
        if(idChannel==null || idDevice==null){
            map.put("code", ApiCode.PARAMETER_ERROR.getCode());
            map.put("msg", ApiCode.PARAMETER_ERROR.getMessage());
            return map;
        }
        if(deviceService.CheckRegister(Long.valueOf(idChannel), Long.valueOf(idDevice))) {
            map.put("code", ApiCode.RECORD_EXIST.getCode());
            map.put("msg", ApiCode.RECORD_EXIST.getMessage());
            return map;
        }
        List<Channel> channelList = channelService.SearchById(Long.valueOf(idChannel));
        if(channelList==null || channelList.size()<1){
            map.put("code", ApiCode.PARAMETER_ERROR.getCode());
            map.put("msg", ApiCode.PARAMETER_ERROR.getMessage());
            return map;
        }
        Device device = deviceService.Register(Long.valueOf(idChannel), Long.valueOf(idDevice));
        if(device!=null){
            map.put("code", ApiCode.OK.getCode());
            Map data = new HashMap<>();
            data.put("id", device.getId());
            data.put("token", device.getTokenNew());
            map.put("data", data);
        }

        return map;
    }

//    @RequestMapping(value = "/register" ,method = RequestMethod.POST)
//    public Map Register(HttpServletRequest request, @RequestBody Device device){
//        Map map = new HashMap<>();
//        if(device.getIdChannel()==null || device.getIdDevice()==null){
//            map.put("code", ApiCode.PARAMETER_ERROR.getCode());
//            map.put("msg", ApiCode.PARAMETER_ERROR.getMessage());
//            return map;
//        }
//        if(deviceService.CheckRegister(device.getIdChannel(), device.getIdDevice())){
//            map.put("code", ApiCode.RECORD_EXIST.getCode());
//            map.put("msg", ApiCode.RECORD_EXIST.getMessage());
//            return map;
//        }
//        List<Channel> channelList = channelService.SearchById(device.getIdChannel());
//        if(channelList==null || channelList.size()<1){
//            map.put("code", ApiCode.PARAMETER_ERROR.getCode());
//            map.put("msg", ApiCode.PARAMETER_ERROR.getMessage());
//            return map;
//        }
//        device = deviceService.Register(device.getIdChannel(), device.getIdDevice());
//        if(device!=null){
//            map.put("code", ApiCode.OK.getCode());
//            Map data = new HashMap<>();
//            data.put("id", device.getId());
//            data.put("token", device.getTokenNew());
//            map.put("data", data);
//        }
//
//        return map;
//    }


    /**
     * 搜索已注册的设备
     * @param request
     * @param response
     */
    @RequestMapping(value = "/search" ,method = RequestMethod.POST)
    public void Search(HttpServletRequest request, HttpServletResponse response){
        String idDevice = request.getParameter("idDevice");
        String idChannel = request.getParameter("idChannel");
        if(idDevice==null)
            idDevice = "0";
        if(idChannel==null)
            idChannel = "0";
        List<Device> list = new ArrayList<>();
        if(idDevice==null && idChannel==null)
            list = deviceService.SearchAll();
        else
            list = deviceService.Search(Long.valueOf(idChannel), Long.valueOf(idDevice));

        for(int i=0; i<list.size(); i++){
            list.get(i).setTokenNew("");
            list.get(i).setTokenOld("");
        }

        HttpUtil.responseOkData(request, response, list);
        return;
    }

}