package com.ruoyi.jarvis.service.impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import com.ruoyi.jarvis.mapper.SuperAdminMapper;
import com.ruoyi.jarvis.domain.SuperAdmin;
import com.ruoyi.jarvis.service.SuperAdminService;

/**
 * 超级管理员Service业务层处理
 *
 * @author ruoyi
 */
@Service
public class SuperAdminServiceImpl implements SuperAdminService
{
    /** 与 {@link com.ruoyi.jarvis.service.impl.WeComInboundServiceImpl#WE_COM_SUPER_USER_ID} 一致 */
    private static final String WE_COM_SUPER_USER_ID = "LinPingFan";

    @Autowired
    private SuperAdminMapper superAdminMapper;

    /**
     * 查询超级管理员
     *
     * @param id 超级管理员主键
     * @return 超级管理员
     */
    @Override
    public SuperAdmin selectSuperAdminById(Long id)
    {
        return superAdminMapper.selectSuperAdminById(id);
    }

    /**
     * 查询超级管理员列表
     *
     * @param superAdmin 超级管理员
     * @return 超级管理员
     */
    @Override
    public List<SuperAdmin> selectSuperAdminList(SuperAdmin superAdmin)
    {
        return superAdminMapper.selectSuperAdminList(superAdmin);
    }

    /**
     * 新增超级管理员
     *
     * @param superAdmin 超级管理员
     * @return 结果
     */
    @Override
    public int insertSuperAdmin(SuperAdmin superAdmin)
    {
        return superAdminMapper.insertSuperAdmin(superAdmin);
    }

    /**
     * 修改超级管理员
     *
     * @param superAdmin 超级管理员
     * @return 结果
     */
    @Override
    public int updateSuperAdmin(SuperAdmin superAdmin)
    {
        return superAdminMapper.updateSuperAdmin(superAdmin);
    }

    /**
     * 批量删除超级管理员
     *
     * @param ids 需要删除的超级管理员主键
     * @return 结果
     */
    @Override
    public int deleteSuperAdminByIds(Long[] ids)
    {
        return superAdminMapper.deleteSuperAdminByIds(ids);
    }

    /**
     * 删除超级管理员信息
     *
     * @param id 超级管理员主键
     * @return 结果
     */
    @Override
    public int deleteSuperAdminById(Long id)
    {
        return superAdminMapper.deleteSuperAdminById(id);
    }

    @Override
    public SuperAdmin selectSuperAdminByUnionId(Long unionId) {
        return superAdminMapper.selectSuperAdminByUnionId(unionId);
    }

    @Override
    public SuperAdmin selectSuperAdminByWecomUserId(String wxid) {
        return superAdminMapper.selectSuperAdminByWecomUserId(wxid);
    }

    @Override
    public String resolveTouserPipeForActivePush(String fromWecomUserId) {
        if (!StringUtils.hasText(fromWecomUserId)) {
            return "";
        }
        String from = fromWecomUserId.trim();
        boolean isSuper = WE_COM_SUPER_USER_ID.equals(from);
        SuperAdmin row = selectSuperAdminByWecomUserId(from);
        String raw = null;
        if (row != null && StringUtils.hasText(row.getTouser())) {
            raw = row.getTouser().trim();
        } else if (isSuper) {
            SuperAdmin ping = selectSuperAdminByWecomUserId(WE_COM_SUPER_USER_ID);
            if (ping != null && StringUtils.hasText(ping.getTouser())) {
                raw = ping.getTouser().trim();
            }
        }
        if (raw != null) {
            return commaSeparatedToWeComTouser(raw);
        }
        return from;
    }

    /** 企微 API：多个成员 UserID 用 {@code |} 分隔 */
    private static String commaSeparatedToWeComTouser(String raw) {
        if (!StringUtils.hasText(raw)) {
            return "";
        }
        String[] parts = raw.split("[,，]");
        StringBuilder sb = new StringBuilder();
        for (String p : parts) {
            String t = p != null ? p.trim() : "";
            if (t.isEmpty()) {
                continue;
            }
            if (sb.length() > 0) {
                sb.append('|');
            }
            sb.append(t);
        }
        return sb.length() > 0 ? sb.toString() : raw.trim();
    }
}
