package com.iailab.module.data.point.controller.admin;

import com.iailab.framework.common.pojo.CommonResult;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.util.object.BeanUtils;
import com.iailab.module.data.point.dto.DaPointDTO;
import com.iailab.module.data.point.entity.DaPointEntity;
import com.iailab.module.data.point.service.DaPointService;
import com.iailab.module.data.point.vo.DaPointPageReqVO;
import com.iailab.module.data.point.vo.DaPointRespVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import static com.iailab.framework.common.pojo.CommonResult.success;


/**
 * @author lirm
 * @Description
 * @createTime 2024年09月2日
 */
@Tag(name = "数据采集,测点")
@RestController
@RequestMapping("/data/da/point")
@Validated
public class DaPointController {

    @Resource
    private DaPointService daPointService;

    @PreAuthorize("@ss.hasPermission('data:point:query')")
    @GetMapping("page")
    public CommonResult<PageResult<DaPointRespVO>> page(@Valid DaPointPageReqVO reqVO){
        PageResult<DaPointEntity> page = daPointService.queryPage(reqVO);
        return success(BeanUtils.toBean(page, DaPointRespVO.class));
    }

    @PreAuthorize("@ss.hasPermission('data:point:query')")
    @GetMapping("/list")
    @Operation(summary = "列表")
    public CommonResult<List<DaPointDTO>> list(@Valid @RequestParam Map<String, Object> params) {
        List<DaPointDTO> list = daPointService.list(params);
        return success(list);
    }

    @PreAuthorize("@ss.hasPermission('data:point:query')")
    @GetMapping("/info/{id}")
    public CommonResult<DaPointDTO> info(@PathVariable("id") String id){
        DaPointDTO info= daPointService.info(id);
        return success(info);
    }

    @PreAuthorize("@ss.hasPermission('data:point:create')")
    @PostMapping("/add")
    public CommonResult<Boolean> create(@RequestBody DaPointDTO daPointDTO){
        String id = UUID.randomUUID().toString();
        daPointDTO.setId(id);
        daPointService.add(daPointDTO);
        return success(true);
    }

    @PreAuthorize("@ss.hasPermission('data:point:update')")
    @PutMapping("/update")
    public CommonResult<Boolean> update(@RequestBody DaPointDTO daPointDTO) {
        daPointService.update(daPointDTO);
        return success(true);
    }

    @PreAuthorize("@ss.hasPermission('data:point:delete')")
    @DeleteMapping("/delete")
    public CommonResult<Boolean> delete(String[] ids) {
        daPointService.delete(ids);
        return success(true);
    }

    @PreAuthorize("@ss.hasPermission('data:point:query')")
    @GetMapping("pointNo")
    public CommonResult<List<DaPointDTO>> getpoint(@RequestParam Map<String, Object> params){
        List<DaPointDTO> list = daPointService.list(params);

        return new CommonResult<List<DaPointDTO>>().setData(list);
    }

    @PreAuthorize("@ss.hasPermission('data:point:update')")
    @PutMapping("/enable")
    @Operation(summary = "启用")
    @Transactional
    public CommonResult<Boolean> enable(@RequestBody String[] ids) {
        daPointService.enableByIds(ids);
        return success(true);
    }

    @PreAuthorize("@ss.hasPermission('data:point:update')")
    @PutMapping("/disable")
    @Operation(summary = "禁用")
    @Transactional
    public CommonResult<Boolean> disable(@RequestBody String[] ids) {
        daPointService.disableByIds(ids);
        return success(true);
    }

}