package com.zhentao.controller;

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

import java.util.Map;

/**
 * 用户扩展信息控制器
 */
@RestController
@RequestMapping("/api/user")
public class UserProfileController {
    
    @Autowired
    private UserProfileService userProfileService;
    
    /**
     * 获取用户完整资料
     * @param userId 用户ID
     * @return 用户资料信息
     */
    @GetMapping("/profile")
    public Result<Map<String, Object>> getUserProfile(@RequestParam Long userId) {
        try {
            Map<String, Object> profile = userProfileService.getUserProfile(userId);
            return Result.success(profile);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("获取用户资料失败: " + e.getMessage());
        }
    }
    
    /**
     * 更新用户资料
     * @param userProfile 用户扩展信息对象
     * @return 更新结果
     */
    @PutMapping("/profile")
    public Result<String> updateUserProfile(@RequestBody UserProfile userProfile) {
        try {
            if (userProfile.getUserId() == null) {
                return Result.error("用户ID不能为空");
            }
            
            Boolean success = userProfileService.updateUserProfile(userProfile);
            if (success) {
                return Result.success("资料更新成功", "success");
            } else {
                return Result.error("资料更新失败");
            }
        } catch (RuntimeException e) {
            return Result.error(e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("资料更新失败: " + e.getMessage());
        }
    }
    
    /**
     * 强制更新用户资料（允许清空字段）
     * @param userProfile 用户扩展信息对象
     * @return 更新结果
     */
    @PutMapping("/profile/force")
    public Result<String> forceUpdateUserProfile(@RequestBody UserProfile userProfile) {
        try {
            if (userProfile.getUserId() == null) {
                return Result.error("用户ID不能为空");
            }
            
            Boolean success = userProfileService.forceUpdateUserProfile(userProfile);
            if (success) {
                return Result.success("资料强制更新成功", "success");
            } else {
                return Result.error("资料强制更新失败");
            }
        } catch (RuntimeException e) {
            return Result.error(e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("资料强制更新失败: " + e.getMessage());
        }
    }
    
    /**
     * 更新单个字段
     * @param userId 用户ID
     * @param fieldName 字段名
     * @param fieldValue 字段值
     * @return 更新结果
     */
    @PutMapping("/profile/field")
    public Result<String> updateProfileField(
            @RequestParam Long userId,
            @RequestParam String fieldName,
            @RequestParam String fieldValue) {
        try {
            UserProfile profile = new UserProfile();
            profile.setUserId(userId);
            
            // 根据字段名设置值 - 支持清空字段（空字符串）
            switch (fieldName) {
                case "realName":
                    profile.setRealName(fieldValue.isEmpty() ? null : fieldValue);
                    break;
                case "idCard":
                    profile.setIdCard(fieldValue.isEmpty() ? null : fieldValue);
                    break;
                case "height":
                    if (fieldValue.isEmpty()) {
                        profile.setHeight(null);
                    } else {
                        try {
                            profile.setHeight(Integer.valueOf(fieldValue));
                        } catch (NumberFormatException e) {
                            return Result.error("身高必须是有效的数字");
                        }
                    }
                    break;
                case "weight":
                    if (fieldValue.isEmpty()) {
                        profile.setWeight(null);
                    } else {
                        try {
                            profile.setWeight(Integer.valueOf(fieldValue));
                        } catch (NumberFormatException e) {
                            return Result.error("体重必须是有效的数字");
                        }
                    }
                    break;
                case "star":
                    profile.setStar(fieldValue.isEmpty() ? null : fieldValue);
                    break;
                case "animal":
                    profile.setAnimal(fieldValue.isEmpty() ? null : fieldValue);
                    break;
                case "schoolName":
                    profile.setSchoolName(fieldValue.isEmpty() ? null : fieldValue);
                    break;
                case "company":
                    profile.setCompany(fieldValue.isEmpty() ? null : fieldValue);
                    break;
                case "jobTitle":
                    profile.setJobTitle(fieldValue.isEmpty() ? null : fieldValue);
                    break;
                case "hobby":
                    profile.setHobby(fieldValue.isEmpty() ? null : fieldValue);
                    break;
                default:
                    return Result.error("不支持的字段: " + fieldName);
            }
            
            Boolean success = userProfileService.updateUserProfile(profile);
            if (success) {
                return Result.success("字段更新成功", "success");
            } else {
                return Result.error("字段更新失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("字段更新失败: " + e.getMessage());
        }
    }
}

