package com.zt.plat.module.base.api;

import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.module.api.UnitConversionApi;
import com.zt.plat.module.api.dto.unitconversion.*;
import com.zt.plat.module.base.controller.admin.unitConversion.vo.*;
import com.zt.plat.module.base.service.unitConversion.UnitConversionService;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;

import static com.zt.plat.framework.common.pojo.CommonResult.success;

/**
 * 单位转换 Feign API 实现类
 * 直接调用现有的 UnitConversionService 方法
 *
 * @author ZT
 */
@RestController
@Validated
public class UnitConversionApiImpl implements UnitConversionApi {

    @Resource
    private UnitConversionService unitConversionService;

    @Override
    public CommonResult<UnitConvertRespDTO> convert(@Valid UnitConvertReqDTO reqDTO) {
        // DTO → VO
        UnitConvertReqVO reqVO = BeanUtils.toBean(reqDTO, UnitConvertReqVO.class);

        // 调用Service
        UnitConvertRespVO respVO = unitConversionService.convert(reqVO);

        // VO → DTO
        UnitConvertRespDTO respDTO = BeanUtils.toBean(respVO, UnitConvertRespDTO.class);

        return success(respDTO);
    }

    @Override
    public CommonResult<UnitConvertRespDTO> convertBySymbol(@Valid UnitConvertBySymbolReqDTO reqDTO) {
        // DTO → VO
        UnitConvertBySymbolReqVO reqVO = BeanUtils.toBean(reqDTO, UnitConvertBySymbolReqVO.class);

        // 调用Service
        UnitConvertRespVO respVO = unitConversionService.convertBySymbol(reqVO);

        // VO → DTO
        UnitConvertRespDTO respDTO = BeanUtils.toBean(respVO, UnitConvertRespDTO.class);

        return success(respDTO);
    }

    @Override
    public CommonResult<UnitConvertRespDTO> convertByName(@Valid UnitConvertByNameReqDTO reqDTO) {
        // DTO → VO
        UnitConvertByNameReqVO reqVO = BeanUtils.toBean(reqDTO, UnitConvertByNameReqVO.class);

        // 调用Service
        UnitConvertRespVO respVO = unitConversionService.convertByName(reqVO);

        // VO → DTO
        UnitConvertRespDTO respDTO = BeanUtils.toBean(respVO, UnitConvertRespDTO.class);

        return success(respDTO);
    }

    @Override
    public CommonResult<BatchUnitConvertRespDTO> batchConvert(@Valid BatchUnitConvertReqDTO reqDTO) {
        // DTO → VO
        BatchUnitConvertReqVO reqVO = BeanUtils.toBean(reqDTO, BatchUnitConvertReqVO.class);

        // 调用Service（Service已经实现了批量转换逻辑）
        BatchUnitConvertRespVO respVO = unitConversionService.batchConvert(reqVO);

        // VO → DTO
        BatchUnitConvertRespDTO respDTO = BeanUtils.toBean(respVO, BatchUnitConvertRespDTO.class);

        return success(respDTO);
    }

    @Override
    public CommonResult<BatchUnitConvertRespDTO> batchConvertBySymbol(@Valid BatchUnitConvertBySymbolReqDTO reqDTO) {
        // DTO → VO
        BatchUnitConvertBySymbolReqVO reqVO = BeanUtils.toBean(reqDTO, BatchUnitConvertBySymbolReqVO.class);

        // 调用Service（Service已经实现了批量转换逻辑）
        BatchUnitConvertRespVO respVO = unitConversionService.batchConvertBySymbol(reqVO);

        // VO → DTO
        BatchUnitConvertRespDTO respDTO = BeanUtils.toBean(respVO, BatchUnitConvertRespDTO.class);

        return success(respDTO);
    }

    @Override
    public CommonResult<BatchUnitConvertRespDTO> batchConvertByName(@Valid BatchUnitConvertByNameReqDTO reqDTO) {
        // DTO → VO
        BatchUnitConvertByNameReqVO reqVO = BeanUtils.toBean(reqDTO, BatchUnitConvertByNameReqVO.class);

        // 调用Service（Service已经实现了批量转换逻辑）
        BatchUnitConvertRespVO respVO = unitConversionService.batchConvertByName(reqVO);

        // VO → DTO
        BatchUnitConvertRespDTO respDTO = BeanUtils.toBean(respVO, BatchUnitConvertRespDTO.class);

        return success(respDTO);
    }
}
