package io.github.orionhealth.xbdd.resources;

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

import javax.ws.rs.BeanParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.springframework.beans.factory.annotation.Autowired;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;

import io.github.orionhealth.xbdd.util.Coordinates;
import io.github.orionhealth.xbdd.util.SerializerUtil;

@Path("/build-reorder")
public class BuildReOrdering {

	@Autowired
	private DB mongoLegacyDb;

	@GET
	@Path("/{product}/{major}.{minor}.{servicePack}")
	@Produces(MediaType.APPLICATION_JSON)
	public Response getBuildsForProductVersion(@BeanParam final Coordinates coordinates) {
		final DBCollection summaryCollection = this.mongoLegacyDb.getCollection("summary");
		final BasicDBObject query = new BasicDBObject("_id", coordinates.getProduct() + "/" + coordinates.getVersionString());
		final Object builds = summaryCollection.findOne(query).get("builds");
		if (builds instanceof List<?>) {
			return Response.ok(SerializerUtil.serialise((List<String>) builds)).build();
		}

		return Response.ok(new ArrayList<>()).build();
	}

	@PUT
	@Path("/{product}/{major}.{minor}.{servicePack}")
	@Consumes(MediaType.APPLICATION_JSON)
	public Response setBuildOrderForProductVersion(@BeanParam final Coordinates coordinates,
			final Builds json) {
		final DBCollection summaryCollection = this.mongoLegacyDb.getCollection("summary");
		final BasicDBObject query = new BasicDBObject("_id", coordinates.getProduct() + "/" + coordinates.getVersionString());
		summaryCollection.update(query, new BasicDBObject("$set", new BasicDBObject("builds", json.builds)));

		return Response.ok().build();
	}

	public static class Builds {
		public List<String> builds;
	}
}