package com.ruoyi.system.service.impl;

import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.entity.ShopUser;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.config.AliConfig;
import com.ruoyi.system.mapper.ShopUserMapper;
import com.ruoyi.system.service.IShopUserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 用户管理Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-07-15
 */
@Service
public class ShopUserServiceImpl implements IShopUserService
{
    private static final Logger log = LoggerFactory.getLogger(ShopUserServiceImpl.class);
    @Autowired
    private ShopUserMapper shopUserMapper;

    /**
     * 查询用户管理
     * 
     * @param id 用户管理主键
     * @return 用户管理
     */
    @Override
    public ShopUser selectShopUserById(String id)
    {
        return shopUserMapper.selectShopUserById(id);
    }

    /**
     * 查询用户管理列表
     * 
     * @param shopUser 用户管理
     * @return 用户管理
     */
    @Override
    public List<ShopUser> selectShopUserList(ShopUser shopUser)
    {
        return shopUserMapper.selectShopUserList(shopUser);
    }

    /**
     * 新增用户管理
     * 
     * @param shopUser 用户管理
     * @return 结果
     */
    @Override
    public int insertShopUser(ShopUser shopUser)
    {
        shopUser.setCreateTime(DateUtils.getNowDate());
        return shopUserMapper.insertShopUser(shopUser);
    }

    /**
     * 修改用户管理
     * 
     * @param shopUser 用户管理
     * @return 结果
     */
    @Override
    public int updateShopUser(ShopUser shopUser)
    {
        shopUser.setUpdateTime(DateUtils.getNowDate());
        return shopUserMapper.updateShopUser(shopUser);
    }

    /**
     * 批量删除用户管理
     * 
     * @param ids 需要删除的用户管理主键
     * @return 结果
     */
    @Override
    public int deleteShopUserByIds(String[] ids)
    {
        return shopUserMapper.deleteShopUserByIds(ids);
    }

    /**
     * 删除用户管理信息
     * 
     * @param id 用户管理主键
     * @return 结果
     */
    @Override
    public int deleteShopUserById(String id)
    {
        return shopUserMapper.deleteShopUserById(id);
    }
    
    /**
     * 更新用户在线时长
     * 
     * @param shopUser 用户信息（包含userId和online字段）
     * @return 结果
     */
    @Override
    public int updateUserOnlineTime(ShopUser shopUser)
    {
        if (shopUser == null || shopUser.getUserId() == null) {
            return 0;
        }
        
        // 先查询用户当前的在线时长
        ShopUser currentUser = shopUserMapper.selectShopUserByUserId(shopUser.getUserId());
        if (currentUser == null) {
            return 0;
        }
        
        // 在原有时长基础上累加新的时长
        String currentOnline = currentUser.getOnline();
        String newOnline = shopUser.getOnline();
        
        // 计算累加后的在线时长
        double currentOnlineValue = 0;
        double newOnlineValue = 0;
        
        try {
            if (currentOnline != null && !currentOnline.isEmpty()) {
                currentOnlineValue = Double.parseDouble(currentOnline);
            }
            
            if (newOnline != null && !newOnline.isEmpty()) {
                // 接口传入的是分钟，需要转换为小时
                newOnlineValue = Double.parseDouble(newOnline) / 60.0;
                // 保留两位小数
                newOnlineValue = Math.round(newOnlineValue * 100) / 100.0;
            }
        } catch (NumberFormatException e) {
            // 如果解析失败，使用默认值
            log.error("解析在线时长失败", e);
        }
        
        // 累加时长（数据库中存储的是小时）
        double totalOnline = currentOnlineValue + newOnlineValue;
        // 保留两位小数
        totalOnline = Math.round(totalOnline * 100) / 100.0;
        
        // 更新用户在线时长
        ShopUser updateUser = new ShopUser();
        updateUser.setUserId(shopUser.getUserId());
        updateUser.setOnline(String.valueOf(totalOnline));
        updateUser.setUpdateTime(DateUtils.getNowDate());
        
        return shopUserMapper.updateUserOnlineTime(updateUser);
    }
    
    /**
     * 获取用户标签列表
     * 
     * @param userId 用户ID
     * @return 用户标签列表（以分号分隔的字符串）
     */
    @Override
    public String getUserTags(String userId) {
        if (userId == null || userId.isEmpty()) {
            return "";
        }
        
        // 查询用户的音乐标签
        List<String> tagList = shopUserMapper.selectUserMusicTags(userId);
        
        if (tagList == null || tagList.isEmpty()) {
            return "";
        }
        
        // 将标签列表转换为分号分隔的字符串
        StringBuilder tags = new StringBuilder();
        for (int i = 0; i < tagList.size(); i++) {
            String tag = tagList.get(i);
            if (tag != null && !tag.isEmpty()) {
                tags.append(tag);
                if (i < tagList.size() - 1) {
                    tags.append(";");
                }
            }
        }
        
        return tags.toString();
    }
}
