package com.sundot.airport.exam.controller;

import com.sundot.airport.common.core.controller.BaseController;
import com.sundot.airport.common.core.domain.AjaxResult;
import com.sundot.airport.common.utils.SecurityUtils;
import com.sundot.airport.exam.dto.UserProfileDTO;
import com.sundot.airport.exam.dto.UserProfileQueryDTO;
import com.sundot.airport.exam.service.IUserProfileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * <b>功能名：</b>UserProfileController<br>
 * <b>说明：</b> 用户画像Controller <br>
 * <b>著作权：</b> Copyright (C) 2025 SUNDOT CORPORATION<br>
 * <b>修改履历：
 *
 * @author Claude
 */
@RestController
@RequestMapping("/exam/daily/user-profile")
public class UserProfileController extends BaseController {

    @Autowired
    private IUserProfileService userProfileService;

    /**
     * 获取用户画像数据
     *
     * @param userId    用户ID (可选,不传则查询当前登录用户)
     * @param startDate 开始日期 YYYY-MM-DD (可选,默认为当前日期前91天)
     * @param endDate   结束日期 YYYY-MM-DD (可选,默认为当前日期)
     * @return 用户画像数据
     */
    @GetMapping
    public AjaxResult getUserProfile(
            @RequestParam(value = "userId", required = false) Long userId,
            @RequestParam(value = "startDate", required = false) String startDate,
            @RequestParam(value = "endDate", required = false) String endDate) {
        try {
            // 构建查询参数
            UserProfileQueryDTO query = new UserProfileQueryDTO();

            // 如果没有传userId,则使用当前登录用户ID
            if (userId == null) {
                userId = SecurityUtils.getUserId();
            }
            query.setUserId(userId);

            // 如果没有传日期范围,则默认为91天
            if (startDate == null || endDate == null) {
                java.time.LocalDate today = java.time.LocalDate.now();
                endDate = today.toString();
                startDate = today.minusDays(91).toString();
            }
            query.setStartDate(startDate);
            query.setEndDate(endDate);

            // 查询用户画像
            UserProfileDTO profile = userProfileService.getUserProfile(query);

            return AjaxResult.success(profile);
        } catch (Exception e) {
            logger.error("获取用户画像失败", e);
            return error("获取用户画像失败：" + e.getMessage());
        }
    }

    /**
     * 批量获取用户画像数据
     *
     * @param userIds   用户ID列表,逗号分隔 (必填)
     * @param startDate 开始日期 YYYY-MM-DD (可选,默认为当前日期前91天)
     * @param endDate   结束日期 YYYY-MM-DD (可选,默认为当前日期)
     * @return 用户画像数据列表
     */
    @GetMapping("/batch")
    public AjaxResult batchGetUserProfile(
            @RequestParam("userIds") String userIds,
            @RequestParam(value = "startDate", required = false) String startDate,
            @RequestParam(value = "endDate", required = false) String endDate) {
        try {
            // 如果没有传日期范围,则默认为91天
            if (startDate == null || endDate == null) {
                java.time.LocalDate today = java.time.LocalDate.now();
                endDate = today.toString();
                startDate = today.minusDays(91).toString();
            }

            // 解析用户ID列表
            String[] userIdArray = userIds.split(",");
            java.util.List<UserProfileDTO> profiles = new java.util.ArrayList<>();

            for (String userIdStr : userIdArray) {
                try {
                    Long userId = Long.parseLong(userIdStr.trim());

                    UserProfileQueryDTO query = new UserProfileQueryDTO();
                    query.setUserId(userId);
                    query.setStartDate(startDate);
                    query.setEndDate(endDate);

                    UserProfileDTO profile = userProfileService.getUserProfile(query);
                    profiles.add(profile);
                } catch (NumberFormatException e) {
                    logger.warn("无效的用户ID: {}", userIdStr);
                } catch (Exception e) {
                    logger.error("获取用户 {} 的画像失败", userIdStr, e);
                }
            }

            AjaxResult result = AjaxResult.success();
            result.put("total", profiles.size());
            result.put("profiles", profiles);
            return result;
        } catch (Exception e) {
            logger.error("批量获取用户画像失败", e);
            return error("批量获取用户画像失败：" + e.getMessage());
        }
    }
}
