package com.seer.teach.admin.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.seer.teach.admin.convert.AdminAiScenarioConvert;
import com.seer.teach.admin.request.AdminAiScenarioPageReq;
import com.seer.teach.admin.request.AdminAiScenarioReq;
import com.seer.teach.admin.response.AdminAiScenarioResp;
import com.seer.teach.common.PageListBean;
import com.seer.teach.common.utils.PageConverterUtils;
import com.seer.teach.teacher.module.entity.AiScenarioEntity;
import com.seer.teach.teacher.service.IAiScenarioService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;
import java.util.Objects;

@Slf4j
@RequiredArgsConstructor
@Service
public class AdminAiScenarioService {

    private final IAiScenarioService aiScenarioService;

    public PageListBean<AdminAiScenarioResp> pageList(AdminAiScenarioPageReq pageRequest) {
        log.info("分页查询AI场景定义列表，请求参数: {}", pageRequest);
        IPage<AiScenarioEntity> page = new Page<>(pageRequest.getPageNo(), pageRequest.getPageSize());

        IPage<AiScenarioEntity> result = aiScenarioService.page(page, new LambdaQueryWrapper<AiScenarioEntity>()
                .eq(Objects.nonNull(pageRequest.getId()), AiScenarioEntity::getId, pageRequest.getId())
                .eq(StringUtils.hasText(pageRequest.getScenarioCode()), AiScenarioEntity::getScenarioCode, pageRequest.getScenarioCode())
                .eq(StringUtils.hasText(pageRequest.getScenarioName()), AiScenarioEntity::getScenarioName, pageRequest.getScenarioName())
                .eq(Objects.nonNull(pageRequest.getDefaultModuleId()), AiScenarioEntity::getDefaultModuleId, pageRequest.getDefaultModuleId())
                .eq(Objects.nonNull(pageRequest.getEnabled()), AiScenarioEntity::getEnabled, pageRequest.getEnabled())
        );
        
        log.info("分页查询AI场景定义列表完成，查询到 {} 条记录", result.getRecords().size());
        return PageConverterUtils.convertPageListBean(result, AdminAiScenarioConvert.INSTANCE::entityListToResponseList);
    }

    public List<AdminAiScenarioResp> list(AdminAiScenarioReq queryParam) {
        log.info("查询AI场景定义列表，请求参数: {}", queryParam);
        List<AiScenarioEntity> result = aiScenarioService.list(new LambdaQueryWrapper<AiScenarioEntity>()
                .eq(Objects.nonNull(queryParam.getId()), AiScenarioEntity::getId, queryParam.getId())
                .eq(StringUtils.hasText(queryParam.getScenarioCode()), AiScenarioEntity::getScenarioCode, queryParam.getScenarioCode())
                .eq(StringUtils.hasText(queryParam.getScenarioName()), AiScenarioEntity::getScenarioName, queryParam.getScenarioName())
                .eq(Objects.nonNull(queryParam.getDefaultModuleId()), AiScenarioEntity::getDefaultModuleId, queryParam.getDefaultModuleId())
                .eq(Objects.nonNull(queryParam.getEnabled()), AiScenarioEntity::getEnabled, queryParam.getEnabled())
        );
        log.info("查询AI场景定义列表完成，查询到 {} 条记录", result.size());
        return AdminAiScenarioConvert.INSTANCE.entityListToResponseList(result);
    }

    public AdminAiScenarioResp getDetail(Long id) {
        log.info("根据ID获取AI场景定义详情，ID: {}", id);
        AiScenarioEntity result = aiScenarioService.getById(id);
        log.info("获取AI场景定义详情完成，ID: {}，结果: {}", id, result);
        return AdminAiScenarioConvert.INSTANCE.entityToResponse(result);
    }

    public boolean save(AdminAiScenarioReq aiScenario) {
        log.info("保存AI场景定义，请求参数: {}", aiScenario);
        AiScenarioEntity entity = AdminAiScenarioConvert.INSTANCE.reqToEntity(aiScenario);
        boolean saved = aiScenarioService.save(entity);
        log.info("保存AI场景定义完成，结果: {}，保存的实体ID: {}", saved, entity.getId());
        return saved;
    }

    public boolean updateById(AdminAiScenarioReq aiScenario) {
        log.info("根据ID更新AI场景定义，请求参数: {}", aiScenario);
        AiScenarioEntity entity = AdminAiScenarioConvert.INSTANCE.reqToEntity(aiScenario);
        boolean updated = aiScenarioService.updateById(entity);
        log.info("根据ID更新AI场景定义完成，结果: {}，更新的实体ID: {}", updated, entity.getId());
        return updated;
    }

    public boolean deleteById(Long id) {
        log.info("根据ID删除AI场景定义，ID: {}", id);
        boolean updated = aiScenarioService.removeById(id);
        log.info("根据ID删除AI场景定义完成，结果: {}，删除的实体ID: {}", updated, id);
        return updated;
    }
}