package com.gzzm.lobster.sandbox;

import java.util.ArrayList;
import java.util.List;

/**
 * SandboxResult —— 一次 code_exec 的结果.
 *
 * <p>{@link #exitCode}：
 * <ul>
 *   <li>0 —— 正常结束</li>
 *   <li>-1 —— walltime 超时被 kill</li>
 *   <li>-2 —— OOM 被 kill</li>
 *   <li>其它非零 —— python 脚本抛异常</li>
 * </ul>
 */
public final class SandboxResult {

    private int exitCode;
    private String stdout;
    private String stderr;
    private long walltimeMs;
    /** timeout / oom / script_error / rejected / ok */
    private String errorCategory;
    private final List<Produced> produced = new ArrayList<>();

    public int getExitCode() { return exitCode; }
    public void setExitCode(int v) { this.exitCode = v; }
    public String getStdout() { return stdout; }
    public void setStdout(String v) { this.stdout = v; }
    public String getStderr() { return stderr; }
    public void setStderr(String v) { this.stderr = v; }
    public long getWalltimeMs() { return walltimeMs; }
    public void setWalltimeMs(long v) { this.walltimeMs = v; }
    public String getErrorCategory() { return errorCategory; }
    public void setErrorCategory(String v) { this.errorCategory = v; }
    public List<Produced> getProduced() { return produced; }

    public void addProduced(Produced p) { this.produced.add(p); }

    /** 一个产物的元信息 —— 对应回落 Artifact + WorkspaceResource. */
    public static final class Produced {
        private String resourceId;
        private String artifactId;
        private String displayName;
        private String mimeType;
        private long size;

        public String getResourceId() { return resourceId; }
        public void setResourceId(String v) { this.resourceId = v; }
        public String getArtifactId() { return artifactId; }
        public void setArtifactId(String v) { this.artifactId = v; }
        public String getDisplayName() { return displayName; }
        public void setDisplayName(String v) { this.displayName = v; }
        public String getMimeType() { return mimeType; }
        public void setMimeType(String v) { this.mimeType = v; }
        public long getSize() { return size; }
        public void setSize(long v) { this.size = v; }
    }
}
