package com.wms_main.service.controller.serviceImpl;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wms_main.dao.ITSysApiService;
import com.wms_main.dao.ITSysLogService;
import com.wms_main.model.dto.query.SysApiQuery;
import com.wms_main.model.dto.query.SysLogQuery;
import com.wms_main.model.dto.response.wms.WmsApiResponse;
import com.wms_main.model.po.TSysApi;
import com.wms_main.model.po.TSysLog;
import com.wms_main.model.vo.wms.PageVo;
import com.wms_main.model.vo.wms.SysApiVo;
import com.wms_main.model.vo.wms.SysLogVo;
import com.wms_main.repository.utils.StringUtils;
import com.wms_main.service.controller.ILogControllerService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * 日志服务类接口实现
 */
@RequiredArgsConstructor
@Slf4j
@Service
public class LogControllerServiceImpl implements ILogControllerService {
    private final ITSysLogService sysLogService;// 接口接收日志服务
    private final ITSysApiService sysApiService;// 接口发送日志服务


    /**
     * 查询接口接收日志---实现
     * @param logQuery 查询参数
     * @return 查询结果
     */
    @Override
    public WmsApiResponse<PageVo<SysLogVo>> queryLogsByPage(SysLogQuery logQuery) {
        if (logQuery == null) {
            return WmsApiResponse.error("查询参数不能为NULL", null);
        }
        Page<TSysLog> page = logQuery.toMpPage();
        LambdaQueryWrapper<TSysLog> lambdaQueryWrapper = new LambdaQueryWrapper<TSysLog>()
                .like(StringUtils.isNotEmpty(logQuery.getQueryStr()), TSysLog::getMethod, logQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(logQuery.getQueryStr()), TSysLog::getUri, logQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(logQuery.getQueryStr()), TSysLog::getRemoteHost, logQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(logQuery.getQueryStr()), TSysLog::getRemoteAddr, logQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(logQuery.getQueryStr()), TSysLog::getRequestContent, logQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(logQuery.getQueryStr()), TSysLog::getStatus, logQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(logQuery.getQueryStr()), TSysLog::getResponseContent, logQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(logQuery.getQueryStr()), TSysLog::getLogTime, logQuery.getQueryStr());
        Page<TSysLog> logsPage = sysLogService.page(page, lambdaQueryWrapper);

        PageVo<SysLogVo> pageVo = PageVo.of(logsPage, logPo -> BeanUtil.toBean(logPo, SysLogVo.class));
        return WmsApiResponse.success("查询接口接收日志成功。", pageVo);
    }

    /**
     * 查询接口发送日志---实现
     * @param apiQuery 查询参数
     * @return 查询结果
     */
    @Override
    public WmsApiResponse<PageVo<SysApiVo>> queryApisByPage(SysApiQuery apiQuery) {
        if (apiQuery == null) {
            return WmsApiResponse.error("查询参数不能为NULL", null);
        }
        Page<TSysApi> page = apiQuery.toMpPage();
        LambdaQueryWrapper<TSysApi> lambdaQueryWrapper = new LambdaQueryWrapper<TSysApi>()
                .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getUrl, apiQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getTimeout, apiQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getMethod, apiQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getContentType, apiQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getData, apiQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getToken, apiQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getSuccess, apiQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getResponseCode, apiQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getRequestMessage, apiQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getResponseMessage, apiQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getRequestTime, apiQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getResponseTime, apiQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getRequestUrl, apiQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getUseTime, apiQuery.getQueryStr()).or()
                .like(StringUtils.isNotEmpty(apiQuery.getQueryStr()), TSysApi::getExceptionMessage, apiQuery.getQueryStr());
        Page<TSysApi> logsPage = sysApiService.page(page, lambdaQueryWrapper);

        PageVo<SysApiVo> pageVo = PageVo.of(logsPage, logPo -> BeanUtil.toBean(logPo, SysApiVo.class));
        return WmsApiResponse.success("查询接口发送日志成功。", pageVo);
    }
}
