package com.xmomen.module.system.controller;

import com.xmomen.framework.mybatis.page.Page;
import com.xmomen.framework.web.exceptions.ArgumentValidException;
import com.xmomen.module.logger.Log;
import com.xmomen.module.system.entity.SysDictionary;
import com.xmomen.module.system.model.CreateDictionaryGroup;
import com.xmomen.module.system.model.UpdateDictionaryGroup;
import com.xmomen.module.system.service.DictionaryGroupService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
 * Created by Jeng on 2016/3/30.
 */
@RestController
public class DictionaryGroupController {

    // 注入DictionaryGroupService
    @Autowired
    DictionaryGroupService dictionaryGroupService;

    /**
     * 数据字典组列表
     * @param limit
     * @param offset
     * @param keyword
     * @return
     */
    // 使用@RequestMapping注解，指定请求路径为"/dictionary"，请求方法为GET
    @RequestMapping(value = "/dictionary", method = RequestMethod.GET)
    // 使用@Log注解，记录操作日志，操作名称为"查询数据字典组"
    @Log(actionName = "查询数据字典组")
    public Page<SysDictionary> getList(@RequestParam(value = "limit") Integer limit,
                                  @RequestParam(value = "offset") Integer offset,
                                  @RequestParam(value = "keyword", required = false) String keyword){
        // 调用dictionaryGroupService的getDictionaryList方法，传入keyword、limit、offset参数，返回查询结果
        return dictionaryGroupService.getDictionaryList(keyword, limit, offset);
    }

    /**
     *  数据字典组列表
     * @param id
    // 使用@RequestMapping注解，指定请求路径为/dictionary/{id}，请求方法为GET
     */
    // 使用@Log注解，记录操作日志，操作名称为“查询数据字典组”
    @RequestMapping(value = "/dictionary/{id}", method = RequestMethod.GET)
    // 定义get方法，参数为id，类型为Integer
    @Log(actionName = "查询数据字典组")
        // 调用dictionaryGroupService的getDictionary方法，传入id，返回SysDictionary对象
    public SysDictionary get(@PathVariable(value = "id") Integer id){
        return dictionaryGroupService.getDictionary(id);
    }

    /**
     * 新增数据字典组
     * @param createDictionaryGroup
     * @param bindingResult
    // 使用@RequestMapping注解指定请求路径和请求方法
     * @return
    // 使用@Log注解记录日志，指定操作名称为“新增数据字典组”
     */
    // 使用@RequestBody注解将请求体中的数据绑定到CreateDictionaryGroup对象中
    // 使用@Valid注解进行数据校验
    // 使用BindingResult对象接收校验结果
    @RequestMapping(value = "/dictionary", method = RequestMethod.POST)
        // 如果校验结果不为空且存在错误，则抛出ArgumentValidException异常
    @Log(actionName = "新增数据字典组")
    public SysDictionary create(@RequestBody @Valid CreateDictionaryGroup createDictionaryGroup, BindingResult bindingResult) throws ArgumentValidException {
        if(bindingResult != null && bindingResult.hasErrors()){
        // 创建SysDictionary对象
            throw new ArgumentValidException(bindingResult);
        // 设置字典编码
        }
        // 设置字典描述
        SysDictionary sysDictionary = new SysDictionary();
        // 设置字典是否可用
        sysDictionary.setDictionaryCode(createDictionaryGroup.getDictionaryCode());
        // 调用dictionaryGroupService的createDictionary方法创建字典
        sysDictionary.setDictionaryDesc(createDictionaryGroup.getDictionaryDesc());
        sysDictionary.setAvailable(createDictionaryGroup.getAvailable());
        return dictionaryGroupService.createDictionary(sysDictionary);
    }

    /**
     * 更新数据字典组
     * @param id
     * @param updateDictionaryGroup
     * @param bindingResult
     * @throws ArgumentValidException
    // 记录操作日志
                           // 请求体中的数据
        // 如果有错误，抛出异常
     */
    // 根据id更新数据字典组
        // 创建SysDictionary对象
        // 设置id
    @RequestMapping(value = "/dictionary/{id}", method = RequestMethod.PUT)
        // 设置可用状态
        // 设置字典编码
    @Log(actionName = "更新数据字典组")
        // 设置字典描述
    public void update(@PathVariable(value = "id") Integer id,
        // 调用更新方法
                           @RequestBody @Valid UpdateDictionaryGroup updateDictionaryGroup, BindingResult bindingResult) throws ArgumentValidException {
        if(bindingResult != null && bindingResult.hasErrors()){
            throw new ArgumentValidException(bindingResult);
        }
        SysDictionary sysDictionary = new SysDictionary();
        sysDictionary.setId(id);
        sysDictionary.setAvailable(updateDictionaryGroup.getAvailable());
        sysDictionary.setDictionaryCode(updateDictionaryGroup.getDictionaryCode());
        sysDictionary.setDictionaryDesc(updateDictionaryGroup.getDictionaryDesc());
    // 使用@Log注解，记录删除数据字典组的操作
    // 使用@RequestMapping注解，指定请求路径为/dictionary/{id}，请求方法为DELETE
        dictionaryGroupService.updateDictionary(sysDictionary);
        // 调用dictionaryGroupService的deleteDictionary方法，传入id参数，删除数据字典组
    }

    /**
     *  删除数据字典组
     * @param id
     */
    // 使用@RequestMapping注解，指定请求路径为/dictionary/{id}，请求方法为DELETE
    @RequestMapping(value = "/dictionary/{id}", method = RequestMethod.DELETE)
    // 使用@Log注解，记录删除数据字典组的操作
    @Log(actionName = "删除数据字典组")
    public void delete(@PathVariable(value = "id") Integer id){
        // 调用dictionaryGroupService的deleteDictionary方法，传入id参数，删除数据字典组
        dictionaryGroupService.deleteDictionary(id);
    }

}
