package org.texttechnologylab.project.gruppe_05_1.rest;

import gnu.trove.impl.sync.TSynchronizedShortObjectMap;
import io.javalin.http.Context;
import io.javalin.openapi.*;
import org.apache.commons.collections.bag.SynchronizedSortedBag;
import org.texttechnologylab.project.gruppe_05_1.database.MongoPprUtils;
import org.texttechnologylab.project.gruppe_05_1.domain.html.HtmlSpeech;
import org.texttechnologylab.project.gruppe_05_1.domain.html.Parlamentarier;
import org.texttechnologylab.project.gruppe_05_1.domain.html.ParlamentarierDetails;
import org.texttechnologylab.project.gruppe_05_1.domain.nlp.Sentiment;
import org.texttechnologylab.project.gruppe_05_1.domain.nlp.Token;
import org.texttechnologylab.project.gruppe_05_1.domain.nlp.Topic;
import org.texttechnologylab.project.gruppe_05_1.domain.speech.SpeechMetaData;
import org.texttechnologylab.project.gruppe_05_1.util.Logger;
import org.texttechnologylab.project.gruppe_05_1.util.PPRUtils;
import org.texttechnologylab.project.gruppe_05_1.xml.speeches.Interfaces.Speech;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import static org.texttechnologylab.project.gruppe_05_1.util.PPRUtils.listFractionsFromMembers;

public class FrontEndController {
    @OpenApi(
            summary = "Get the homepage.",
            description = "Get the homepage",
            operationId = "getHomepage",
            path = "/",
            methods = HttpMethod.GET,
            tags = {"Homepage"},
            responses = {
                    @OpenApiResponse(status = "200")
            })
    public static void getHomepage(Context ctx) {
        ctx.render("home.ftl");
    }

    /*
     TODO: getAllParlamentarier gibt es hier UND im ParlamentarierController (etwas unterschiedliche Implementierungen)
     --> konsolidieren!
     */
    @OpenApi(
            summary = "Get alle Parlamentarier. Man kann nach Vor-, Nachname oder Partei filtern.",
            description = "Listet alle Parlamentarier bzw. diejenige, welche den Filter entsprechen",
            operationId = "getAllParlamentarier",
            path = "/",
            methods = HttpMethod.GET,
            tags = {"Parlamentarier"},
            queryParams = {
                    @OpenApiParam(name = "filter", description = "Full-Text-Filter. Kann Vorname, Nachname oder Partei filtern", required = false),
            },
            responses = {
                    @OpenApiResponse(status = "200", content = {@OpenApiContent(from = Parlamentarier[].class)})
            })
    public static void getAllParlamentarier(Context ctx) {

        List<Parlamentarier> parlamentarier = MongoPprUtils.getFilteredMembers(ctx);
        PPRUtils.sortParlamentarierByName(parlamentarier);

        Map<String, Object> attributes = new HashMap<>();
        attributes.put("parlamentarier", parlamentarier);
        attributes.put("parties", listFractionsFromMembers(MongoPprUtils.getAllParlamentarier("")));
        ctx.render("parlamentarier.ftl", attributes);
    }

    /*
     TODO: Achtung: getParlamentarierDetails gibt es ab jetzt LEDIGLICH im ParlamentarierController!
     */

    /*
     TODO: Achtung: showSpeech gibt es ab jetzt LEDIGLICH im SpeechController!
     */

    /*
     TODO: Achtung: showSpeech gibt es ab jetzt LEDIGLICH im SpeechController!
     */

}
