package com.uavps.system.service.impl;

import com.uavps.common.utils.DateUtils;
import com.uavps.common.utils.StringUtils;
import com.uavps.system.domain.UavpsAlgorithmTask;
import com.uavps.system.domain.UavpsAlgorithmTaskFormation;
import com.uavps.system.mapper.UavpsAlgorithmTaskFormationMapper;
import com.uavps.system.mapper.UavpsAlgorithmTaskMapper;
import com.uavps.system.service.IUavpsAlgorithmTaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

/**
 * 算法任务Service业务层处理
 *
 * @author ruoyi
 * @date 2025-02-18
 */
@Service
public class UavpsAlgorithmTaskServiceImpl implements IUavpsAlgorithmTaskService {
    @Autowired
    private UavpsAlgorithmTaskMapper uavpsAlgorithmTaskMapper;

    @Autowired
    private UavpsAlgorithmTaskFormationMapper uavpsAlgorithmTaskFormationMapper;

    /**
     * 查询算法任务
     *
     * @param id 算法任务主键
     * @return 算法任务
     */
    @Override
    public UavpsAlgorithmTask selectUavpsAlgorithmTaskById(Long id) {
        return uavpsAlgorithmTaskMapper.selectUavpsAlgorithmTaskById(id);
    }

    /**
     * 查询算法任务列表
     *
     * @param uavpsAlgorithmTask 算法任务
     * @return 算法任务
     */
    @Override
    public List<UavpsAlgorithmTask> selectUavpsAlgorithmTaskList(UavpsAlgorithmTask uavpsAlgorithmTask) {
        return uavpsAlgorithmTaskMapper.selectUavpsAlgorithmTaskList(uavpsAlgorithmTask);
    }

    /**
     * 新增算法任务
     *
     * @param uavpsAlgorithmTask 算法任务
     * @return 结果
     */
    @Override
    @Transactional
    public int insertUavpsAlgorithmTask(UavpsAlgorithmTask uavpsAlgorithmTask) {
        uavpsAlgorithmTask.setCreateTime(DateUtils.getNowDate());
        int rows = uavpsAlgorithmTaskMapper.insertUavpsAlgorithmTask(uavpsAlgorithmTask);
        // 新增算法任务关联的多目标集群信息
        insertTaskFormation(uavpsAlgorithmTask);
        return rows;
    }

    /**
     * 修改算法任务
     *
     * @param uavpsAlgorithmTask 算法任务
     * @return 结果
     */
    @Override
    @Transactional
    public int updateUavpsAlgorithmTask(UavpsAlgorithmTask uavpsAlgorithmTask) {
        uavpsAlgorithmTask.setUpdateTime(DateUtils.getNowDate());
        // 删除算法任务关联的多目标集群信息
        uavpsAlgorithmTaskFormationMapper.deleteTaskFormationByTaskId(uavpsAlgorithmTask.getId());
        // 新增算法任务关联的多目标集群信息
        insertTaskFormation(uavpsAlgorithmTask);
        return uavpsAlgorithmTaskMapper.updateUavpsAlgorithmTask(uavpsAlgorithmTask);
    }

    /**
     * 批量删除算法任务
     *
     * @param ids 需要删除的算法任务主键
     * @return 结果
     */
    @Override
    @Transactional
    public int deleteUavpsAlgorithmTaskByIds(Long[] ids) {
        // 删除算法任务关联的多目标集群信息
        uavpsAlgorithmTaskFormationMapper.deleteTaskFormationByTaskIds(ids);
        return uavpsAlgorithmTaskMapper.deleteUavpsAlgorithmTaskByIds(ids);
    }

    /**
     * 删除算法任务信息
     *
     * @param id 算法任务主键
     * @return 结果
     */
    @Override
    public int deleteUavpsAlgorithmTaskById(Long id) {
        return uavpsAlgorithmTaskMapper.deleteUavpsAlgorithmTaskById(id);
    }

    public void insertTaskFormation(UavpsAlgorithmTask uavpsAlgorithmTask) {
        Long[] formationIds = uavpsAlgorithmTask.getFormationIds();
        if (StringUtils.isNotEmpty(formationIds)) {
            // 新增算法任务与多目标集群信息的关联
            List<UavpsAlgorithmTaskFormation> list = new ArrayList<UavpsAlgorithmTaskFormation>(formationIds.length);
            for (Long formationId : formationIds) {
                UavpsAlgorithmTaskFormation tf = new UavpsAlgorithmTaskFormation();
                tf.setAlgorithmTaskId(uavpsAlgorithmTask.getId());
                tf.setFormationId(formationId);
                list.add(tf);
            }
            uavpsAlgorithmTaskFormationMapper.batchTaskFormation(list);
        }
    }
}
