package com.wms_main.service.controller.serviceImpl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wms_main.dao.ITAppConfigService;
import com.wms_main.model.dto.query.ConfigQuery;
import com.wms_main.model.dto.request.wms.ConfigUpdateRequest;
import com.wms_main.model.dto.response.wms.BaseWmsApiResponse;
import com.wms_main.model.dto.response.wms.WmsApiResponse;
import com.wms_main.model.po.TAppConfig;
import com.wms_main.model.vo.wms.ConfigVo;
import com.wms_main.model.vo.wms.PageVo;
import com.wms_main.repository.utils.StringUtils;
import com.wms_main.service.controller.IConfigControllerService;
import com.wms_main.service.system.ISystemService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * 配置控制类服务实现
 */
@Service
@RequiredArgsConstructor
public class ConfigControllerServiceImpl implements IConfigControllerService {
    // 配置服务
    private final ITAppConfigService appConfigService;
    // 系统服务
    private final ISystemService systemService;

    /**
     * 查询系统配置(分页)---实现
     *
     * @param configQuery 配置
     * @return 结果
     */
    public WmsApiResponse<PageVo<ConfigVo>> queryConfigsByPage(ConfigQuery configQuery) {
        if (configQuery == null) {
            return WmsApiResponse.error("查询参数不能为NULL", null);
        }
        Page<TAppConfig> page = configQuery.toMpPage();
        LambdaQueryWrapper<TAppConfig> lambdaQueryWrapper = new LambdaQueryWrapper<TAppConfig>()
                .like(StringUtils.isNotEmpty(configQuery.getConfigKey()), TAppConfig::getConfigKey, configQuery.getConfigKey())
                .like(StringUtils.isNotEmpty(configQuery.getConfigName()), TAppConfig::getConfigName, configQuery.getConfigName());
        Page<TAppConfig> configPage = appConfigService.page(page, lambdaQueryWrapper);

        PageVo<ConfigVo> pageVo = PageVo.of(configPage, ConfigVo::of);
        return WmsApiResponse.success("查询配置数据成功", pageVo);
    }

    /**
     * 更新系统配置
     *
     * @param configUpdateRequest 更新请求
     * @return 结果
     */
    @Transactional(rollbackFor = Exception.class)
    public BaseWmsApiResponse updateConfig(ConfigUpdateRequest configUpdateRequest) {
        if (configUpdateRequest == null) {
            return BaseWmsApiResponse.error("更新请求不能为NULL。");
        }
        if (StringUtils.isEmpty(configUpdateRequest.getConfigId())) {
            return BaseWmsApiResponse.error("请求缺少配置id，无法更新。");
        }
        // 查询对应的配置信息
        TAppConfig targetConfig = appConfigService.getById(configUpdateRequest.getConfigId());
        if (targetConfig == null) {
            return BaseWmsApiResponse.error("id不正确，未查询到对应的配置信息。");
        }
        // 更新配置
        appConfigService.update(new LambdaUpdateWrapper<TAppConfig>()
                .set(TAppConfig::getConfigValue, configUpdateRequest.getConfigValue())
                .eq(TAppConfig::getConfigId, configUpdateRequest.getConfigId()));
        // 重载配置
        if (systemService.reloadConfig()) {
            return BaseWmsApiResponse.success("更新配置成功，重载配置成功。");
        } else {
            return BaseWmsApiResponse.success("更新配置成功，但重载配置失败，需手动重载配置。");
        }
    }
}
