package com.ruoyi.project.service.impl;

import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.project.mapper.BizProjectMapper;
import com.ruoyi.project.domain.BizProject;
import com.ruoyi.project.service.IBizProjectService;

/**
 * 项目Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-08-28
 */
@Service
public class BizProjectServiceImpl implements IBizProjectService 
{
    @Autowired
    private BizProjectMapper bizProjectMapper;

    @Autowired
    private com.ruoyi.models.mapper.BizModuleMapper bizModuleMapper;

    /**
     * 查询项目
     * 
     * @param projectId 项目主键
     * @return 项目
     */
    @Override
    public BizProject selectBizProjectByProjectId(Long projectId)
    {
        return bizProjectMapper.selectBizProjectByProjectId(projectId);
    }

    /**
     * 查询项目列表
     * 
     * @param bizProject 项目
     * @return 项目
     */
    @Override
    public List<BizProject> selectBizProjectList(BizProject bizProject)
    {
        Long userId = SecurityUtils.getUserId();
        if (!SecurityUtils.isAdmin(userId)) {
            // 设置查询参数，用于权限控制
            bizProject.getParams().put("currentUserId", userId);
        }
        return bizProjectMapper.selectBizProjectList(bizProject);
    }

    /**
     * 新增项目
     * 
     * @param bizProject 项目
     * @return 结果
     */
    @Override
    public int insertBizProject(BizProject bizProject)
    {
        bizProject.setCreateTime(DateUtils.getNowDate());
        return bizProjectMapper.insertBizProject(bizProject);
    }

    /**
     * 修改项目
     * 
     * @param bizProject 项目
     * @return 结果
     */
    @Override
    public int updateBizProject(BizProject bizProject)
    {
        bizProject.setUpdateTime(DateUtils.getNowDate());
        return bizProjectMapper.updateBizProject(bizProject);
    }

    /**
     * 到期项目自动转“立项中”(2)
     */
    public int markOverdueProjectsAsInitiating()
    {
        // 这里通过 mapper 执行批量更新（需要在 XML 中实现对应 SQL）
        return bizProjectMapper.markOverdueProjectsAsInitiating();
    }

    /**
     * 起始时间到达：将“立项中”(2) 自动转为 “进行中”(0)
     */
    public int markInitiatingToOngoingByStartTime()
    {
        return bizProjectMapper.markInitiatingToOngoingByStartTime();
    }

    /**
     * 批量删除项目
     * 
     * @param projectIds 需要删除的项目主键
     * @return 结果
     */
    @Override
    public int deleteBizProjectByProjectIds(Long[] projectIds)
    {
        // 按文档约束：仅当项目下的模块均未被接取且没有任何模块已完成时方可删除
        for (Long projectId : projectIds)
        {
            // 查询项目下所有模块的状态
            java.util.List<com.ruoyi.models.domain.BizModule> modules = bizModuleMapper.selectByProjectId(projectId);
            boolean hasTakenOrCompleted = modules.stream().anyMatch(m -> "1".equals(m.getStatus()) || "2".equals(m.getStatus()));
            if (hasTakenOrCompleted)
            {
                throw new RuntimeException("项目下存在已接取或已完成的模块，无法删除");
            }
        }
        return bizProjectMapper.deleteBizProjectByProjectIds(projectIds);
    }

    /**
     * 删除项目信息
     * 
     * @param projectId 项目主键
     * @return 结果
     */
    @Override
    public int deleteBizProjectByProjectId(Long projectId)
    {
        return bizProjectMapper.deleteBizProjectByProjectId(projectId);
    }
}
