package com.jiayue.ipfcst.console.controller;

import com.jiayue.ipfcst.aop.SaveValidate;
import com.jiayue.ipfcst.common.core.web.vo.ResponseVO;
import com.jiayue.ipfcst.common.data.entity.SysParameter;
import com.jiayue.ipfcst.console.service.SysParameterService;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 系统参数restful接口
 *
 * @author tl
 * @version 3.0
 * @since 2020/6/28 9:10
 */
@RestController
@RequestMapping(value = "sysParameter")
@Slf4j
public class SysParameterController {

    private final SysParameterService sysParameterService;

    @Autowired
    public SysParameterController(SysParameterService sysParameterService) {
      this.sysParameterService = sysParameterService;
    }

    /**
     * 新增系统参数
     *
     * @param sysParameter 参数
     * @return 执行结果
     */
    @SneakyThrows
    @PostMapping()
    @SaveValidate
    public ResponseVO add(@RequestBody SysParameter sysParameter) {
      try {
        this.sysParameterService.add(sysParameter);
        return ResponseVO.success(1);
      } catch (Exception ex) {
        log.error("系统错误" + ex);
        return ResponseVO.error(ex);
      }

    }

    /**
     * 修改系统参数
     *
     * @param sysParameter 参数
     * @return 执行结果
     */
    @SneakyThrows
    @SaveValidate
    @PutMapping()
    public ResponseVO update(@RequestBody SysParameter sysParameter) {
      this.sysParameterService.update(sysParameter);
      return ResponseVO.success(1);
    }

    /**
     * 删除系统参数
     *
     * @param sysParameter 参数
     * @return 执行结果
     */
    @SneakyThrows
    @SaveValidate
    @DeleteMapping()
    public ResponseVO delete(@RequestBody SysParameter sysParameter) {
      this.sysParameterService.delete(sysParameter.getId());
      return ResponseVO.success(1);
    }


    /**
     * 获取所有系统参数
     *
     * @return 执行结果
     */
    @SneakyThrows
    @GetMapping()
    public ResponseVO getAll() {
      List<SysParameter> list = this.sysParameterService.getAll();
      return ResponseVO.success(list);
    }


    /**
     * 获取系统参数
     *
     * @param page
     * @param size
     * @return 执行结果
     */
    @SneakyThrows
    @GetMapping(value = "/{page}/{size}")
    public ResponseVO getAll(@PathVariable("page") Integer page, @PathVariable("size") Integer size) {
      SysParameter sysParameter = new SysParameter();
      Page<SysParameter> sysParameterPage = this.sysParameterService.get(sysParameter, page, size);
      return ResponseVO.success(sysParameterPage);
    }


  /**
   * 获取系统参数
   *
   * @param page
   * @param size
   * @return 执行结果
   */
  @SneakyThrows
  @GetMapping(value = "/{page}/{size}/{keywords}")
  public ResponseVO getAForKeywords(@PathVariable("page") Integer page, @PathVariable("size") Integer size,@PathVariable("keywords") String keywords) {
    SysParameter sysParameter = new SysParameter();
    Page<SysParameter> sysParameterPage = this.sysParameterService.getForKeywords(sysParameter, page, size,keywords);
    return ResponseVO.success(sysParameterPage);
  }

    /**
     * 根据参数id获取系统参数
     *
     * @param id
     * @return 执行结果
     */
    @SneakyThrows
    @GetMapping(value = "/sysParameter/{id}/")
    public ResponseVO getById(@PathVariable("id") Integer id) {
      return ResponseVO.success(sysParameterService.getParameter(id));
    }

  /**
   * 根据参数标识获取系统参数
   *
   * @param sysKey
   * @return 执行结果
   */
  @SneakyThrows
  @GetMapping(value = "/sysParameterKey/{sysKey}")
  public ResponseVO getById(@PathVariable("sysKey") String sysKey) {
    return ResponseVO.success(sysParameterService.getParameterBySysKey(sysKey));
  }


  /**
   * 新增系统参数(控制器无限制)
   *
   * @param sysParameter 参数
   * @return 执行结果
   */
  @SneakyThrows
  @PostMapping("/noSaveValidate")
  public ResponseVO save(@RequestBody SysParameter sysParameter) {
    try {
      this.sysParameterService.update(sysParameter);
      return ResponseVO.success(1);
    } catch (Exception ex) {
      log.error("系统错误" + ex);
      return ResponseVO.error(ex);
    }

  }

}
