package com.huimv.employment.controller.mp;

import com.huimv.employment.common.web.R;
import com.huimv.employment.security.LoginUser;
import com.huimv.employment.security.LoginUserHolder;
import com.huimv.employment.service.auth.ProfileService;
import com.huimv.employment.service.auth.dto.MpUserInfoResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 小程序用户档案接口。
 * <p>
 * 登录后查询当前用户的登记状态及企业/临时工详情，供前端判断是否跳转登记页。
 * 路径 {@code /api/v1/mp/getInfo}，需 JWT 鉴权（Header 携带 {@code Authorization: Bearer <token>}）。
 * </p>
 * <p>
 * 典型调用时机：
 * <ul>
 *   <li>短信登录成功后，调用 {@code /getInfo}，根据 {@code registered} 决定跳转登记页或首页</li>
 *   <li>App 冷启动时校验 Token 有效且档案是否已完善</li>
 * </ul>
 * </p>
 * <p>
 * 按 {@code userType} 返回不同结构：
 * {@code enterprise} 时 {@code enterprise} 有值；{@code worker} 时 {@code worker} 有值；未登记时对应字段为 {@code null}。
 * </p>
 */
@RestController
@RequestMapping("/api/v1/mp")
@Tag(name = "用户档案", description = "登记状态查询，需 JWT 鉴权")
@SecurityRequirement(name = "Authorization")
public class ProfileController {

    private final ProfileService profileService;

    public ProfileController(ProfileService profileService) {
        this.profileService = profileService;
    }

    /**
     * 查询当前用户登记状态与档案详情。
     * <p>
     * 从 JWT 解析 {@code userId}、{@code userType}，无需额外请求参数。
     * </p>
     * <p>
     * 响应字段说明：
     * <ul>
     *   <li>{@code userType} — 用户类型：{@code enterprise}（企业主）/ {@code worker}（临时工）</li>
     *   <li>{@code registered} — 是否已完成档案登记；{@code false} 时应跳转对应登记页</li>
     *   <li>{@code mobileMask} — 登录账号手机号脱敏，如 {@code 138****8000}</li>
     *   <li>{@code enterprise} — 企业登记信息（仅 {@code userType=enterprise} 且已登记时有值；
     *       含法人身份证号明文 {@code legalPersonIdCard}、未脱敏手机号 {@code contactMobile}）</li>
     *   <li>{@code worker} — 临时工登记信息（仅 {@code userType=worker} 且已登记时有值）</li>
     * </ul>
     * </p>
     * <p>
     * 未登记时前端跳转：
     * {@code enterprise} → {@code POST /api/v1/mp/enterprise/register}；
     * {@code worker} → {@code POST /api/v1/mp/worker/register}。
     * </p>
     *
     * @return 用户类型、登记状态及企业/临时工档案（脱敏字段）
     */
    @GetMapping("/getInfo")
    @Operation(summary = "查询当前用户登记状态与详情")
    public R<MpUserInfoResponse> getInfo() {
        LoginUser loginUser = LoginUserHolder.require();
        return R.ok(profileService.getInfo(loginUser.getUserId()));
    }
}
