module fcm.FCMService;

import fcm.FCMRequest;
import fcm.FCMResponse;

import mars;

import std.stdio;
import std.conv;
import vibe.data.json;

class FCMService {

	private string serverApiKey;

	this(string key) {
		serverApiKey = key;
	}

	FCMResponse request(FCMRequest request) {
		HttpClientOptions options = new HttpClientOptions;
		options.headers = ["Authorization" : "key=" ~ serverApiKey, "Content-Type" : "application/json"];
		HttpClient client = CurlHttpClient.init(options);
		
		writeln(options.headers);
		writeln(request.serializeToJsonString());
		
		HttpRequest postRequest = new HttpRequest.Builder()
					.url("https://fcm.googleapis.com/fcm/send")
					.data(request.serializeToJsonString())
					.build();
		HttpResponse response = client.post(postRequest);
		
		string requestBody = response.getResponseBodyString;
		writeln(requestBody);
		writeln("StatusCode " ~ to!string(response.getStatusCode));

		enforce(StatusCode.isSuccess(response.getStatusCode), "Cannot get result! Status code = " ~ to!string(response.getStatusCode));

		return deserializeJson!FCMResponse(requestBody);
	}
}