package com.zioinfo.kintex.common;

import com.fasterxml.jackson.annotation.JsonInclude;

/**
 * 표준 응답 봉투. 모든 REST 응답은 이 shape를 사용한다.
 * 실패 시 {@code error}에는 코드+요약 메시지만 담고 스택트레이스는 절대 포함하지 않는다(보안 불변).
 *
 * <pre>
 * { "success": true,  "data": { ... },  "error": null }
 * { "success": false, "data": null,     "error": { "code": "VALIDATION", "message": "..." } }
 * </pre>
 */
@JsonInclude(JsonInclude.Include.ALWAYS)
public record ApiResponse<T>(boolean success, T data, ApiError error) {

    public static <T> ApiResponse<T> ok(T data) {
        return new ApiResponse<>(true, data, null);
    }

    public static <T> ApiResponse<T> fail(ApiError error) {
        return new ApiResponse<>(false, null, error);
    }

    /** 오류 payload — 코드 + 사람이 읽을 요약 메시지만(민감정보·스택트레이스 제외). */
    public record ApiError(String code, String message) {
    }
}
