package com.chinaweal.aiccs.aiccs.susnate.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chinaweal.aiccs.aiccs.susnate.dto.EntBaseWithFalPerInfoQueryDTO;
import com.chinaweal.aiccs.aiccs.susnate.dto.FalPerInfoAddDTO;
import com.chinaweal.aiccs.aiccs.susnate.dto.FalPerInfoQueryDTO;
import com.chinaweal.aiccs.aiccs.susnate.dto.FalPerInfoUpdateDTO;
import com.chinaweal.aiccs.aiccs.susnate.entity.EFalPerInfo;
import com.chinaweal.aiccs.aiccs.susnate.service.IEFalPerInfoService;
import com.chinaweal.aiccs.aiccs.susnate.vo.EntBaseWithFalPerInfoVO;
import com.chinaweal.aiccs.common.base.controller.BaseController;
import com.chinaweal.youfool.framework.springboot.base.query.BaseQuery;
import com.chinaweal.youfool.framework.springboot.rest.RestResult;
import com.chinaweal.youfool.framework.springboot.rest.ResultCode;
import com.github.xiaoymin.knife4j.annotations.ApiSort;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

/**
 *
 * @author zhouxy
 * @since 2025-12-29
 */
@Api(tags = "3.虚假登记责任人信息表")
@ApiSort(3)
@RestController
@RequestMapping("/eFalPerInfo")
public class EFalPerInfoController extends BaseController {

    @Resource
    private IEFalPerInfoService iEFalPerInfoService;

    @ApiOperation(value = "0.新增虚假登记责任人信息", position = 0)
    @PostMapping("/addFalPerInfo")
    public RestResult<EFalPerInfo> addFalPerInfo(@Valid @RequestBody FalPerInfoAddDTO dto, BindingResult bindingResult, HttpServletRequest request) {
        if (bindingResult.hasErrors()) {
            return RestResult.error(ResultCode.PARAM_IS_INVALID, bindingResult.getFieldError().getDefaultMessage());
        }
        EFalPerInfo data = iEFalPerInfoService.addFalPerInfo(dto, getLoginUser(request));
        return RestResult.ok(data);
    }

    @ApiOperation(value = "1.修改虚假登记责任人信息", position = 1)
    @PostMapping("/updateFalPerInfo")
    public RestResult<EFalPerInfo> updateFalPerInfo(@Valid @RequestBody FalPerInfoUpdateDTO dto, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return RestResult.error(ResultCode.PARAM_IS_INVALID, bindingResult.getFieldError().getDefaultMessage());
        }
        EFalPerInfo data = iEFalPerInfoService.updateFalPerInfo(dto);
        return RestResult.ok(data);
    }

    @ApiOperation(value = "2.删除虚假登记责任人信息（软删除）", position = 2)
    @PostMapping("/deleteFalPerInfo/{falperId}")
    public RestResult<Boolean> deleteFalPerInfo(@ApiParam(value = "虚假登记ID", required = true) @PathVariable("falperId") String falperId) {
        boolean result = iEFalPerInfoService.deleteFalPerInfo(falperId);
        return RestResult.ok(result);
    }

    @ApiOperation(value = "3.分页查询市场主体信息（包含是否有虚假登记责任人信息的判断）", position = 3)
    @PostMapping("/listEntBaseWithFalPerInfo")
    public RestResult<IPage<EntBaseWithFalPerInfoVO>> listEntBaseWithFalPerInfo(@RequestBody BaseQuery<EntBaseWithFalPerInfoQueryDTO> query) {
        // 提取查询参数
        EntBaseWithFalPerInfoQueryDTO queryDTO = query.getEntity(EntBaseWithFalPerInfoQueryDTO.class);
        if (queryDTO == null) {
            queryDTO = new EntBaseWithFalPerInfoQueryDTO();
        }

        IPage<EntBaseWithFalPerInfoVO> data = iEFalPerInfoService.listEntBaseWithFalPerInfo(new Page<>(query.getCurrent(), query.getSize()), queryDTO);
        return RestResult.ok(data);
    }

    @ApiOperation(value = "4.分页查询虚假登记责任人信息表", position = 4)
    @PostMapping("/listFalPerInfo")
    public RestResult<IPage<EFalPerInfo>> listFalPerInfo(@RequestBody BaseQuery<FalPerInfoQueryDTO> query) {
        // 提取查询参数
        FalPerInfoQueryDTO queryDTO = query.getEntity(FalPerInfoQueryDTO.class);
        if (queryDTO == null) {
            queryDTO = new FalPerInfoQueryDTO();
        }

        IPage<EFalPerInfo> data = iEFalPerInfoService.listFalPerInfo(new Page<>(query.getCurrent(), query.getSize()), queryDTO);
        return RestResult.ok(data);
    }

    @ApiOperation(value = "5.通过id查询虚假登记责任人信息", position = 5)
    @GetMapping("/getFalPerInfoById/{falperId}")
    public RestResult<EFalPerInfo> getFalPerInfoById(@ApiParam(value = "虚假登记ID", required = true) @PathVariable("falperId") String falperId) {
        EFalPerInfo data = iEFalPerInfoService.getById(falperId);
        return RestResult.ok(data);
    }
}
