package com.zksy.web.controller.base;

import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zksy.base.domain.EquipmentMaintain;
import com.zksy.base.service.EquipmentMaintainService;
import com.zksy.common.annotation.Anonymous;
import com.zksy.common.annotation.Log;
import com.zksy.common.core.domain.AjaxResult;
import com.zksy.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 设备维护记录
 */
@Slf4j
@RestController
@RequestMapping("/EquipmentMaintain")
@Api(tags = "设备维护记录")
public class EquipmentMaintainController {

    @Autowired
    private EquipmentMaintainService service;

    @GetMapping("/getById/{id}")
    @ApiOperation(value = "设备维护记录搜索getById")
    @Anonymous
    public AjaxResult getById(@PathVariable String id) {
        EquipmentMaintain equipmentMaintain = service.getById(id);
        if(equipmentMaintain==null){
            return AjaxResult.error("该设备维护记录不存在");
        }
        return AjaxResult.success(equipmentMaintain);
    }

    //TODO 查询条件待完善
    @GetMapping("/findByPage")
    @ApiOperation(value = "设备维护记录分页")
    @Anonymous
    public Page findByPage(long pageNum, long pageSize,
                           @RequestParam(required = false)String maintainId,
                           @RequestParam(required = false)String equipmentId,
                           @RequestParam(required = false)String maintainType,
                           @RequestParam(required = false)String maintainPerson) throws Exception {
        return service.findByPage(pageNum, pageSize, maintainId,equipmentId,maintainType,maintainPerson);
    }

    @GetMapping("/getList")
    @ApiOperation(value = "查询所有设备维护记录")
    @Anonymous
    public AjaxResult getList() throws Exception {
        return AjaxResult.success(service.list());
    }

    @PostMapping("/save")
    @ApiOperation(value = "新增设备维护记录")
    @Log(title = "新增设备维护记录", businessType = BusinessType.INSERT)
    public AjaxResult save(@RequestBody EquipmentMaintain entity) {
        boolean saved = service.saveWithCheck(entity);
        return saved ? AjaxResult.success("新增成功",saved)
                : AjaxResult.error("新增失败",saved);
    }

    @PostMapping("/saveBatch")
    @ApiOperation(value = "设备维护记录批量新增")
    @Log(title = "批量新增设备维护记录", businessType = BusinessType.INSERT)
    public AjaxResult saveBatch(@RequestBody List<EquipmentMaintain> entityList) {
        // 基础校验：列表不能为空
        if (CollectionUtils.isEmpty(entityList)) {
            return AjaxResult.error("批量新增失败：设备维护记录列表不能为空");
        }

        boolean saved = service.saveBatchWithCheck(entityList);
        return saved ? AjaxResult.success("新增成功",saved)
                : AjaxResult.error("新增失败",saved);
    }

    @PutMapping("/updateById")
    @ApiOperation(value = "设备维护记录修改")
    @Log(title = "修改设备维护记录", businessType = BusinessType.UPDATE)
    public AjaxResult updateById(@RequestBody EquipmentMaintain entity) {
        boolean updated = service.updateWithCheck(entity);
        return updated ? AjaxResult.success("修改成功",updated)
                : AjaxResult.error("修改失败",updated);
    }

    @DeleteMapping("/deleteById")
    @ApiOperation(value = "设备维护记录删除")
    @Log(title = "删除设备维护记录", businessType = BusinessType.DELETE)
    public AjaxResult deleteById(String id) {
        boolean deleted = service.removeById(id);
        return deleted ? AjaxResult.success("删除成功",deleted)
                : AjaxResult.error("删除失败",deleted);
    }

    @DeleteMapping("/deleteBatchById")
    @ApiOperation(value = "设备维护记录批量删除")
    @Log(title = "设备维护记录批量删除", businessType = BusinessType.DELETE)
    public AjaxResult deleteBatchById(@RequestParam List<String> ids) {
        boolean deleted = service.removeByIds(ids);
        return deleted ? AjaxResult.success("删除成功",deleted)
                : AjaxResult.error("删除失败",deleted);
    }
}
