package com.nokia.sms.controller;

import com.nokia.common.http.R;
import com.nokia.sms.service.QueryService;
import com.nokia.sms.service.SocketClientService;
import com.nokia.sms.vo.DelBlkResp;
import com.nokia.sms.vo.QueryDTO;
import com.nokia.sms.vo.QueryResp;
import com.nokia.sms.vo.RequestParams;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

/**
 * 黑名单查询及解除接口类
 */
@RestController
@RequestMapping("/sms/blacklist/api/")
public class BlkController {
    private final SocketClientService socketClientService;
    private final QueryService queryService;

    public BlkController(SocketClientService socketClientService, QueryService queryService) {
        this.socketClientService = socketClientService;
        this.queryService = queryService;
    }

    /**
     * 黑名单解除接口
     */
    @PostMapping("remove")
    public R remove(@Valid @RequestBody RequestParams params) {
        DelBlkResp delBlkResp = new DelBlkResp();
        delBlkResp.setDelBlkSuccess(false);
        delBlkResp.setDelBlkMessage("解除黑名单失败");
        // 查询黑名单
        QueryResp queryResp = queryService.query(new QueryDTO(params.getPhone(), params.getFromSystem()));
        // 查询黑名单失败
        if (Boolean.FALSE.equals(queryResp.getQuerySuccess())) {
            return R.ok().data(delBlkResp);
        }

        QueryResp.QueryResultDTO queryResultDTO = queryResp.getQueryResult();
        // 不能解黑
        if (Boolean.FALSE.equals(queryResultDTO.getAllowToDel())) {
            return R.ok().data(delBlkResp);
        }

        // 解黑失败
        if (!socketClientService.delBlk(params.getPhone())) {
            return R.ok().data(delBlkResp);
        }

        // 解黑成功
        delBlkResp.setDelBlkSuccess(true);
        delBlkResp.setDelBlkMessage("成功解除黑名单");
        return R.ok().data(delBlkResp);
    }

    /**
     * 黑名单查询接口
     */
    @PostMapping("query")
    public R query(@Valid @RequestBody QueryDTO params) {
        QueryResp resp = queryService.query(params);
        return R.ok().data(resp);
    }
}
