import * as core from "@actions/core";
import { request } from "../../http-request";
import { parsePrDetailFromPullApi } from "../parse-utils";
import { RepoContext, PrDetail } from "../types";

// 平台 API 基址支持环境变量注入(issue #8),缺省为公网地址
const GITCODE_API_BASE =
  process.env.GITCODE_API_BASE_URL || "https://api.gitcode.com/api/v5/repos";

/**
 * GitCode PR 详情客户端:评论事件无事件文件时,按 PR 编号反查全局 id 与分支
 * (鉴权与 label-manager 一致:Authorization 头直接携带 token)。
 */
export class GitCodePrClient {
    /**
     * 反查 PR 详情。
     *
     * @param ctx 统一上下文(orgName/repoName/prId)
     * @param token GitCode 访问令牌
     * @return PR 详情;缺 PR 编号、请求失败或响应缺全局 id 时返回 null
     */
    async fetchPrDetail(ctx: RepoContext, token: string): Promise<PrDetail | null> {
        if (ctx.prId == null) return null;
        const url = `${GITCODE_API_BASE}/${ctx.orgName}/${ctx.repoName}/pulls/${ctx.prId}`;
        try {
            const resp = await request("GET", url, { "Authorization": token });
            if (resp.statusCode < 200 || resp.statusCode >= 300) {
                core.warning(`GitCode PR 详情反查失败: ${resp.statusCode} ${resp.body}`);
                return null;
            }
            return parsePrDetailFromPullApi(JSON.parse(resp.body));
        } catch (e) {
            core.warning(
                `GitCode PR 详情反查异常: ${e instanceof Error ? e.message : String(e)}`,
            );
            return null;
        }
    }
}