package cn.iocoder.yudao.module.llm.service.finetuningtask;

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;
import cn.iocoder.yudao.module.llm.controller.admin.finetuningtask.vo.*;
import cn.iocoder.yudao.module.llm.dal.dataobject.finetuningtask.FineTuningTaskDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;

import cn.iocoder.yudao.module.llm.dal.mysql.finetuningtask.FineTuningTaskMapper;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.llm.enums.ErrorCodeConstants.FINE_TUNING_TASK_NOT_EXISTS;


/**
 * 模型调优 —— 微调任务 Service 实现类
 *
 * @author 华大大模型
 */
@Service
@Validated
public class FineTuningTaskServiceImpl implements FineTuningTaskService {

    @Resource
    private FineTuningTaskMapper fineTuningTaskMapper;

    @Override
    public Long createFineTuningTask(FineTuningTaskSaveReqVO createReqVO) {
        // 插入
        FineTuningTaskDO fineTuningTask = BeanUtils.toBean(createReqVO, FineTuningTaskDO.class);
        fineTuningTaskMapper.insert(fineTuningTask);
        // 返回
        return fineTuningTask.getId();
    }

    @Override
    public void updateFineTuningTask(FineTuningTaskSaveReqVO updateReqVO) {
        // 校验存在
        validateFineTuningTaskExists(updateReqVO.getId());
        // 更新
        FineTuningTaskDO updateObj = BeanUtils.toBean(updateReqVO, FineTuningTaskDO.class);
        fineTuningTaskMapper.updateById(updateObj);
    }

    @Override
    public void deleteFineTuningTask(Long id) {
        // 校验存在
        validateFineTuningTaskExists(id);
        // 删除
        LambdaUpdateWrapper<FineTuningTaskDO> wrapper = new LambdaUpdateWrapper<>();
        wrapper.eq(FineTuningTaskDO::getId, id)
                .set(FineTuningTaskDO::getDeleted,true);
        fineTuningTaskMapper.update(null,wrapper);
//        fineTuningTaskMapper.deleteById(id);
    }

    private void validateFineTuningTaskExists(Long id) {
        if (fineTuningTaskMapper.selectById(id) == null) {
            throw exception(FINE_TUNING_TASK_NOT_EXISTS);
        }
    }

    @Override
    public FineTuningTaskDO getFineTuningTask(Long id) {
        return fineTuningTaskMapper.selectById(id);
    }

    @Override
    public PageResult<FineTuningTaskDO> getFineTuningTaskPage(FineTuningTaskPageReqVO pageReqVO) {
        return fineTuningTaskMapper.selectPage(pageReqVO);
    }

}