package com.cn.fdapfe.biz.service.impl;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.cn.fdapfe.common.annotation.RepeatSubmit;
import com.cn.fdapfe.common.utils.DateUtils;
import com.cn.fdapfe.common.utils.SecurityUtils;
import com.cn.fdapfe.common.utils.StringUtils;
import com.cn.fdapfe.common.utils.uuid.UUID;
import org.springframework.stereotype.Service;
import com.cn.fdapfe.biz.mapper.DataMapper;
import com.cn.fdapfe.biz.domain.Data;
import com.cn.fdapfe.biz.service.IDataService;

import javax.annotation.Resource;

/**
 * 数据管理Service业务层处理
 * 
 * @author Allem
 * @date 2025-03-07
 */
@Service
public class DataServiceImpl implements IDataService
{
    @Resource
    private DataMapper dataMapper;

    /**
     * 查询数据管理
     * 
     * @param id 数据管理主键
     * @return 数据管理
     */
    @Override
    public Data selectDataById(String id)
    {
        return dataMapper.selectById(id);
    }


    /**
     * 查询数据管理列表
     * 
     * @param data 数据管理
     * @return 数据管理
     */
    @Override
    public List<Data> selectDataList(Data data)
    {
        QueryWrapper<Data> wrapper = new QueryWrapper<>();
        wrapper.lambda().eq(StringUtils.isNotEmpty(data.getId()),Data::getId, data.getId())
                .eq(StringUtils.isNotEmpty(data.getName()),Data::getName, data.getName())
                .eq(StringUtils.isNotEmpty(data.getType()),Data::getType, data.getType());
        return dataMapper.selectList(wrapper);
    }

    /**
     * 新增数据管理
     * 
     * @param data 数据管理
     * @return 结果
     */
    @RepeatSubmit
    @Override
    public int insertData(Data data)
    {
        data.setCreateTime(DateUtils.getNowDate());
        data.setUpdateBy(SecurityUtils.getUsername());
        data.setId(UUID.randomUUID().toString());
        return dataMapper.insert(data);
    }

    /**
     * 修改数据管理
     * 
     * @param data 数据管理
     * @return 结果
     */
    @RepeatSubmit
    @Override
    public int updateData(Data data)
    {
        data.setUpdateBy(SecurityUtils.getUsername());
        data.setUpdateTime(DateUtils.getNowDate());
        return dataMapper.updateById(data);
    }

    /**
     * 批量删除数据管理
     * 
     * @param ids 需要删除的数据管理主键
     * @return 结果
     */
    public int deleteDataByIds(String[] ids) {
        if (ids == null || ids.length == 0) {
            return 0;
        }

        for (String id : ids) {
            // 根据 id 查询数据获取 filePath
            Data entity = dataMapper.selectById(id);
            if (entity != null) {
                String filePath = entity.getFilePath();
                if (filePath != null && !filePath.isEmpty()) {
                    try {
                        Path path = Paths.get(filePath).resolve(entity.getFileName());
                        if (Files.exists(path)) {
                            Files.delete(path);
                        }
                    } catch (IOException e) {
                        // 记录日志，可根据实际情况使用日志框架
                        System.err.println("删除文件失败，文件路径: " + filePath + ", 错误信息: " + e.getMessage());
                    }
                }
            }
        }

        return ids.length == 1 ? dataMapper.deleteById(ids[0]) : dataMapper.deleteBatchIds(Arrays.asList(ids));
    }

    @Override
    public List<Data> getOptions() {
        return dataMapper.selectList(null);
    }
}
