package org.ta.authserver.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * 修复：显式指定 @RequestParam 的 name 属性，解决反射获取参数名失败问题
 */
@RestController
public class CallbackController {

    /**
     * 授权回调接口
     * @param code 授权码（授权成功时返回）
     * @param state 客户端传入的状态码
     * @param error 授权失败时的错误码
     * @param errorDescription 授权失败时的错误描述
     * @return 回调结果
     */
    @GetMapping("/callback")
    public String callback(
            // 显式指定参数名，required=false（失败时无code参数）
            @RequestParam(name = "code", required = false) String code,
            @RequestParam(name = "state", required = false) String state,
            @RequestParam(name = "error", required = false) String error,
            @RequestParam(name = "error_description", required = false) String errorDescription) {

        // 授权成功场景
        if (code != null && !code.isEmpty()) {
            return "<h1>✅ 授权成功</h1>" +
                    "<p>授权码：" + code + "</p>" +
                    "<p>State：" + state + "</p>" +
                    "<p>📢 请使用该授权码兑换 AccessToken（有效期5分钟）</p>";
        }

        // 授权失败场景
        if (error != null) {
            return "<h1>❌ 授权失败</h1>" +
                    "<p>错误码：" + error + "</p>" +
                    "<p>错误描述：" + errorDescription + "</p>";
        }

        // 无参数场景
        return "<h1>⚠️ 回调参数异常</h1><p>未获取到有效授权参数</p>";
    }
}