package com.zhentao.controller;

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

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * 活动管理控制器
 */
@RestController
@RequestMapping("/admin/activity")
@CrossOrigin(origins = "*")
public class ActivityController {
    
    @Autowired
    private ActivityMapper activityMapper;
    
    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    
    /**
     * 创建活动
     */
    @PostMapping("/create")
    public Result<String> create(@RequestBody Activity activity) {
        try {
            System.out.println("=== 创建活动 ===");
            System.out.println("活动数据: " + activity);
            
            // 处理时间字符串（如果是字符串格式）
            processDateFields(activity);
            
            // 设置默认值
            if (activity.getActualParticipants() == null) {
                activity.setActualParticipants(0);
            }
            if (activity.getIsHot() == null) {
                activity.setIsHot(false);
            }
            activity.setCreatedTime(LocalDateTime.now());
            
            int rows = activityMapper.insert(activity);
            if (rows > 0) {
                System.out.println("✅ 活动创建成功，ID: " + activity.getId());
                return Result.success("创建成功");
            } else {
                return Result.error("创建失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("创建活动失败：" + e.getMessage());
        }
    }
    
    /**
     * 更新活动
     */
    @PutMapping("/update/{id}")
    public Result<String> update(@PathVariable Integer id, @RequestBody Activity activity) {
        try {
            System.out.println("=== 更新活动 ===");
            System.out.println("活动ID: " + id);
            System.out.println("活动数据: " + activity);
            
            // 检查活动是否存在
            Activity existingActivity = activityMapper.selectById(id);
            if (existingActivity == null) {
                return Result.error("活动不存在");
            }
            
            // 处理时间字段
            processDateFields(activity);
            
            // 设置ID
            activity.setId(id);
            
            // 保留创建时间
            activity.setCreatedTime(existingActivity.getCreatedTime());
            
            int rows = activityMapper.updateById(activity);
            if (rows > 0) {
                System.out.println("✅ 活动更新成功");
                return Result.success("更新成功");
            } else {
                return Result.error("更新失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("更新活动失败：" + e.getMessage());
        }
    }
    
    /**
     * 删除活动
     */
    @DeleteMapping("/delete/{id}")
    public Result<String> delete(@PathVariable Integer id) {
        try {
            int rows = activityMapper.deleteById(id);
            if (rows > 0) {
                return Result.success("删除成功");
            } else {
                return Result.error("活动不存在");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("删除活动失败：" + e.getMessage());
        }
    }
    
    /**
     * 获取活动报名列表
     */
    @GetMapping("/registrations/{id}")
    public Result<?> getRegistrations(@PathVariable Integer id) {
        try {
            // TODO: 实现获取报名列表的逻辑
            return Result.success("功能开发中");
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("获取报名列表失败：" + e.getMessage());
        }
    }
    
    /**
     * 获取活动统计
     */
    @GetMapping("/stats/{id}")
    public Result<?> getStats(@PathVariable Integer id) {
        try {
            // TODO: 实现获取活动统计的逻辑
            return Result.success("功能开发中");
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("获取活动统计失败：" + e.getMessage());
        }
    }
    
    /**
     * 处理日期字段（支持字符串转LocalDateTime）
     */
    private void processDateFields(Activity activity) {
        // 时间字段由前端传入时已经是正确格式，这里只做兼容性处理
        // 如果需要额外的时间处理逻辑，可以在这里添加
    }
}

