package fr.titionfire.ffsaf.rest;

import fr.titionfire.ffsaf.domain.service.ResultService;
import fr.titionfire.ffsaf.domain.service.UpdateService;
import io.smallrye.mutiny.Uni;
import jakarta.inject.Inject;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;

import java.util.HashMap;
import java.util.List;

@Path("api/public/result/{id}")
public class ExternalResultEndpoints {

    @Inject
    ResultService resultService;

    @Inject
    UpdateService updateService;

    @PathParam("id")
    private String id;

    @GET
    @Path("/poule/list")
    @Produces(MediaType.APPLICATION_JSON)
    public Uni<HashMap<String, Long>> list() {
        return resultService.getCategoryList(id);
    }

    @GET
    @Path("/poule/data")
    @Produces(MediaType.APPLICATION_JSON)
    public Uni<?> getArray(@QueryParam("poule") long poule, @DefaultValue("-1") @QueryParam("rf") long rf) {
        if (poule == 0)
            return Uni.createFrom().voidItem();

        if (updateService.needUpdate(poule, rf)) {
            return resultService.getCategory(id, poule);
        } else {
            return Uni.createFrom().voidItem();
        }
    }

    @GET
    @Path("/comb/list")
    @Produces(MediaType.APPLICATION_JSON)
    public Uni<HashMap<String, String>> combList() {
        return resultService.getCombList(id);
    }

    @GET
    @Path("/comb/data")
    @Produces(MediaType.APPLICATION_JSON)
    public Uni<?> getArray(@QueryParam("comb") String comb) {
        if (comb.equals("0"))
            return Uni.createFrom().item("");
        return resultService.getCombArrayPublic(id, comb);
    }

    @GET
    @Path("/comb/get_all")
    @Produces(MediaType.APPLICATION_JSON)
    public Uni<?> getAll() {
        return resultService.getAllCombArrayPublic(id);
    }


    @GET
    @Path("/club/list")
    @Produces(MediaType.APPLICATION_JSON)
    public Uni<HashMap<String, Long>> clubList() {
        return resultService.getClubList(id);
    }

    @GET
    @Path("/club/classement")
    @Produces(MediaType.APPLICATION_JSON)
    public Uni<List<ResultService.ClubClassement>> clubClassement() {
        return resultService.getAllClubArray(id);
    }

    @GET
    @Path("/club/data")
    @Produces(MediaType.APPLICATION_JSON)
    public Uni<?> getClubArray(@QueryParam("club") long club) {
        if (club == 0)
            return Uni.createFrom().item("");
        return resultService.getClubArray2(id, club, null);
    }
}
