package com.ygtx.web.util;

import com.ygtx.common.constant.UserConstants;
import com.ygtx.common.core.domain.entity.SysUser;
import com.ygtx.common.utils.StringUtils;
import com.ygtx.system.service.ISysUserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * SSO用户同步工具类
 * 
 * @author ruoyi
 */
@Component
public class SsoUserSyncUtil
{
    private static final Logger log = LoggerFactory.getLogger(SsoUserSyncUtil.class);

    @Autowired
    private ISysUserService userService;

    /**
     * 同步ICE用户信息到本地系统
     * 
     * @param userData ICE返回的用户数据
     * @return 同步后的用户对象
     */
    public SysUser syncIceUser(Map<String, Object> userData)
    {
        if (userData == null || !userData.containsKey("username")) 
        {
            log.error("ICE用户数据不完整，缺少必要字段");
            return null;
        }

        String username = (String) userData.get("username");
        String employeeNum = (String) userData.get("employee_num");
        String companyNum = (String) userData.get("company_num");

        if (StringUtils.isEmpty(employeeNum))
        {
            log.error("用户名不能为空");
            return null;
        }

        // 查找现有用户
        SysUser existingUser = userService.selectUserByUserName(employeeNum);

        if (existingUser != null) 
        {
            // 如果是SSO用户，更新用户信息
            return updateUser(existingUser, userData);
        } 
        else 
        {
            log.info("用户不存在：{}", username);
            return null;
        }
    }

    /**
     * 更新现有用户信息
     * 
     * @param user 现有用户
     * @param userData ICE返回的用户数据
     * @return 更新后的用户对象
     */
    private SysUser updateUser(SysUser user, Map<String, Object> userData)
    {
        String employeeNum = (String) userData.get("employee_num");
        String companyNum = (String) userData.get("company_num");

        // 更新用户信息
        user.setUpdateTime(null); // 设置为数据库自动更新时间

        // 如果有员工编号，更新电话号码
        if (StringUtils.isNotEmpty(employeeNum)) 
        {
            user.setPhonenumber(employeeNum);
        }

        // 设置为SSO用户标识（如果系统中有相应的字段）
        // user.setRemark(user.getRemark() + "; SSO User");

        int result = userService.updateUser(user);
        
        if (result > 0) 
        {
            log.info("成功更新SSO用户信息：{}", user.getUserName());
            return user;
        } 
        else 
        {
            log.error("更新SSO用户信息失败：{}", user.getUserName());
            return null;
        }
    }
}