package com.ruoyi.system.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.SysAreaMapper;
import com.ruoyi.system.domain.SysArea;
import com.ruoyi.system.service.ISysAreaService;

/**
 * 区域-省市区县Service业务层处理
 *
 * @author ruoyi
 * @date 2025-09-29
 */
@Service
public class SysAreaServiceImpl implements ISysAreaService
{
    @Autowired
    private SysAreaMapper sysAreaMapper;

    /**
     * 查询区域-省市区县
     *
     * @param areaId 区域-省市区县主键
     * @return 区域-省市区县
     */
    @Override
    public SysArea selectSysAreaByAreaId(Long areaId)
    {
        return sysAreaMapper.selectSysAreaByAreaId(areaId);
    }

    /**
     * 查询区域-省市区县列表
     *
     * @param sysArea 区域-省市区县
     * @return 区域-省市区县
     */
    @Override
    public List<SysArea> selectSysAreaList(SysArea sysArea)
    {
        return sysAreaMapper.selectSysAreaList(sysArea);
    }
    @Override
    public List<SysArea> selectSysAreaListByIds(List<Long> ids)
    {
        return sysAreaMapper.selectSysAreaListByIds(ids);
    }

    @Override
    public List<SysArea> listTree(SysArea criteria) {
        List<SysArea> list = selectSysAreaList(criteria);
        Map<Long, SysArea> cache = list.stream().collect(Collectors.toMap(SysArea::getAreaId, v -> v));
        List<SysArea> res = new ArrayList<>(6);
        for (SysArea row : list) {
            Long parentId = row.getParentId();
            if (null == parentId || parentId == 0l || !cache.containsKey(parentId)) {
                res.add(row);
            } else {
                cache.get(parentId).addChildren(row);
            }
        }
        return res;

//        Map<Long, SysArea> cache = new HashMap<>();
//        List<SysArea> res = new ArrayList<>();
//        // 先将所有节点放入缓存
//        for (SysArea area : list) {
//            cache.put(area.getAreaId(), area);
//            // 初始化children列表
//            if (area.getChildren() == null) {
//                area.setChildren(new ArrayList<>());
//            }
//        }
//
//        // 建立父子关系
//        for (SysArea area : list) {
//            Long parentId = area.getParentId();
//            if (parentId != null && parentId != 0L && cache.containsKey(parentId)) {
//                SysArea parent = cache.get(parentId);
//                if (parent.getChildren() == null) {
//                    parent.setChildren(new ArrayList<>());
//                }
//                parent.getChildren().add(area);
//            }
//        }
//
//        // 只返回根节点
//        for (SysArea area : list) {
//            Long parentId = area.getParentId();
//            if (parentId == null || parentId == 0L || !cache.containsKey(parentId)) {
//                res.add(area);
//            }
//        }
//        return res;
    }

    /**
     * 新增区域-省市区县
     *
     * @param sysArea 区域-省市区县
     * @return 结果
     */
    @Override
    public int insertSysArea(SysArea sysArea)
    {
        return sysAreaMapper.insertSysArea(sysArea);
    }

    /**
     * 修改区域-省市区县
     *
     * @param sysArea 区域-省市区县
     * @return 结果
     */
    @Override
    public int updateSysArea(SysArea sysArea)
    {
        return sysAreaMapper.updateSysArea(sysArea);
    }

    /**
     * 批量删除区域-省市区县
     *
     * @param areaIds 需要删除的区域-省市区县主键
     * @return 结果
     */
    @Override
    public int deleteSysAreaByAreaIds(Long[] areaIds)
    {
        return sysAreaMapper.deleteSysAreaByAreaIds(areaIds);
    }

    /**
     * 删除区域-省市区县信息
     *
     * @param areaId 区域-省市区县主键
     * @return 结果
     */
    @Override
    public int deleteSysAreaByAreaId(Long areaId)
    {
        return sysAreaMapper.deleteSysAreaByAreaId(areaId);
    }
}
