package api;

import io.cppSerialization.SerializationDataOutput;
import io.cppSerialization.SerializationException;
import io.cppSerialization.TotalSerializable;
import org.jetbrains.annotations.NotNull;
import replicationAnnotations.ReplicateOccurence;
import system.objectsWeight.Light;

/**
 * Результат выполнения апишной команды.
 *
 * @author eugene.ivanovsky
 */
@ReplicateOccurence(needCppCode = true)
@Light
public class ExecuteResult implements TotalSerializable {
  private static final long serialVersionUID = 7911429280066326425L;
  private static final short SERIALIZATION_ID = (short) 340;

  @NotNull
  private APIResult status = APIResult.FAILED;
  @NotNull
  private String reason = "";

  public ExecuteResult() {
  }

  public ExecuteResult(@NotNull APIResult status, @NotNull String reason) {
    this.status = status;
    this.reason = reason;
  }

  public void readCpp(@NotNull io.cppSerialization.SerializationDataInput in) throws SerializationException {
    int statusOrdinal = (int) in.readByte();
    if (statusOrdinal >= 0 && statusOrdinal < APIResult.values().length)
      status = APIResult.values()[statusOrdinal];
    else
      throw new SerializationException("wrong ordinal " + statusOrdinal + " of enum APIResult");
    reason = in.readUTF();
  }

  public void writeCpp(@NotNull SerializationDataOutput out) throws SerializationException {
    out.writeByte(status.ordinal());
    out.writeUTF(reason);
  }

  public short getID() {
    return SERIALIZATION_ID;
  }

  @NotNull
  public String getReason() {
    return reason;
  }

  @NotNull
  public APIResult getStatus() {
    return status;
  }
}
