package com.zhentao.controller;

import com.zhentao.common.Result;
import com.zhentao.entity.Activity;
import com.zhentao.service.ActivityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.*;

/**
 * 活动控制器
 */
@RestController
@RequestMapping("/api/activity")
public class ActivityController {
    
    @Autowired
    private ActivityService activityService;
    
    /**
     * 获取活动详情
     * 
     * @param id 活动ID
     * @return 活动详情
     */
    @GetMapping("/detail/{id}")
    public Result<Activity> getActivityDetail(@PathVariable Integer id) {
        try {
            Activity activity = activityService.getActivityDetail(id);
            if (activity == null) {
                return Result.error("活动不存在");
            }
            
            // 设置默认值（如果数据库中没有）
            if (activity.getDescription() == null) {
                activity.setDescription("这是一个精彩的活动，欢迎参加！");
            }
            if (activity.getNotes() == null) {
                activity.setNotes("1. 请准时到达活动现场\n2. 着装要求：休闲正式\n3. 活动期间请保持手机静音\n4. 报名后如不能参加请提前24小时取消");
            }
            
            return Result.success(activity);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("获取活动详情失败：" + e.getMessage());
        }
    }
    
    /**
     * 获取活动列表
     * 
     * @param type 活动类型（可选，支持数字类型或 "hot" 表示热门活动）
     * @param status 活动状态（可选）
     * @param limit 限制数量（可选）
     * @return 活动列表
     */
    @GetMapping("/list")
    public Result<List<Activity>> getActivityList(
            @RequestParam(required = false) String type,
            @RequestParam(required = false) Integer status,
            @RequestParam(required = false) Integer limit) {
        try {
            List<Activity> activityList;
            
            // 如果是热门活动
            if ("hot".equalsIgnoreCase(type)) {
                activityList = activityService.getHotActivities(limit);
            } else {
                // 普通活动列表
                Integer typeInt = null;
                if (type != null && !type.isEmpty()) {
                    try {
                        typeInt = Integer.parseInt(type);
                    } catch (NumberFormatException e) {
                        // 忽略无法转换的类型
                    }
                }
                activityList = activityService.getActivityList(typeInt, status, limit);
            }
            
            return Result.success(activityList);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("获取活动列表失败：" + e.getMessage());
        }
    }
    
    /**
     * 报名活动
     * 
     * @param activityId 活动ID
     * @param userId 用户ID（从请求参数获取）
     * @return 结果
     */
    @PostMapping("/register/{activityId}")
    public Result<String> registerActivity(
            @PathVariable Integer activityId,
            @RequestParam Integer userId) {
        try {
            System.out.println("=== 活动报名请求 ===");
            System.out.println("活动ID: " + activityId);
            System.out.println("用户ID: " + userId);
            
            // 验证参数
            if (userId == null || userId <= 0) {
                return Result.error("用户ID无效");
            }
            
            // 调用Service层进行报名，包含人数限制校验
            boolean success = activityService.registerActivity(activityId, userId);
            
            if (success) {
                System.out.println("✅ 报名成功");
                return Result.success("报名成功", "报名成功");
            } else {
                System.out.println("❌ 报名失败");
                return Result.error("报名失败");
            }
        } catch (RuntimeException e) {
            // 捕获Service层抛出的业务异常，返回友好提示
            System.err.println("❌ 报名失败: " + e.getMessage());
            return Result.error(e.getMessage());
        } catch (Exception e) {
            System.err.println("❌ 系统异常: " + e.getMessage());
            e.printStackTrace();
            return Result.error("报名失败：" + e.getMessage());
        }
    }
}

