package com.box.sdk;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import static org.junit.Assert.fail;

import com.eclipsesource.json.JsonObject;

public abstract class JSONRequestInterceptor implements RequestInterceptor {
    public static RequestInterceptor respondWith(final JsonObject json) {
        return new RequestInterceptor() {
            @Override
            public BoxAPIResponse onRequest(BoxAPIRequest request) {
                return new BoxJSONResponse() {
                    @Override
                    public String getJSON() {
                        return json.toString();
                    }
                };
            }
        };
    }

    @Override
    public BoxAPIResponse onRequest(BoxAPIRequest request) {
        BufferedReader bodyReader = new BufferedReader(new InputStreamReader(request.getBody(),
            StandardCharsets.UTF_8));

        JsonObject json = null;
        try {
            json = JsonObject.readFrom(bodyReader);
            bodyReader.close();
        } catch (IOException e) {
            fail(e.getMessage());
        }

        return this.onJSONRequest((BoxJSONRequest) request, json);
    }

    protected abstract BoxAPIResponse onJSONRequest(BoxJSONRequest request, JsonObject json);
}