package server.logic.ws_protocol.JSON.entyties;

/**
 * Базовый класс для всех событий (event).
 * Общие поля: op и payload.
 *.
 * Формат JSON (event):
 * {
 *   "op": "...",
 *   "payload": { ... }
 * }
 */
public abstract class Net_Event {

    /** Имя операции / события (op). */
    private String op;

    /**
     * Произвольные данные.
     * В JSON это поле "payload".
     */
    private Object payload;

    // --- getters / setters ---

    public String getOp() {
        return op;
    }

    public void setOp(String op) {
        this.op = op;
    }

    public Object getPayload() {
        return payload;
    }

    public void setPayload(Object payload) {
        this.payload = payload;
    }
}

package server.logic.ws_protocol.JSON.entyties;

/**
 * Ответ с ошибкой (любой отказ).
 *.
 * В payload будет:
 * {
 *   "code": "...",
 *   "message": "..."
 * }
 */
public class Net_Exception_Response extends Net_Response {

    private String code;
    private String message;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

package server.logic.ws_protocol.JSON.entyties;

/**
 * Базовый класс для всех запросов (client → server).
 *.
 * Наследуется от NetEvent и добавляет requestId.
 *.
 * Формат JSON (request):
 * {
 *   "op": "...",
 *   "requestId": "...",
 *   "payload": { ... }
 * }
 */
public abstract class Net_Request extends Net_Event {

    /** Идентификатор запроса, чтобы связать запрос и ответ. */
    private String requestId;

    // --- getters / setters ---

    public String getRequestId() {
        return requestId;
    }

    public void setRequestId(String requestId) {
        this.requestId = requestId;
    }
}

package server.logic.ws_protocol.JSON.entyties;

/**
 * Базовый класс для всех ответов (server → client).
 *.
 * Наследуется от NetRequest и добавляет status.
 *.
 * Формат JSON (response):
 * {
 *   "op": "...",
 *   "requestId": "...",
 *   "status": 200,
 *   "payload": { ... } // и для успеха, и для ошибки
 * }
 */
public abstract class Net_Response extends Net_Request {

    /** Статус результата (200 — успех, любое другое значение — ошибка). */
    private int status;

    // --- getters / setters ---

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public boolean isOk() {
        return status == 200;
    }
}

