package dmo.fs.db.wsnext.hib;

import dmo.fs.db.MessageUser;
import io.quarkus.websockets.next.WebSocketConnection;
import io.smallrye.mutiny.Uni;
import org.hibernate.reactive.mutiny.Mutiny;

import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;

public interface DodexHibernateReactive {

    void databaseSetup() throws InterruptedException;

    Uni<Long> deleteUser(MessageUser messageUser);

    Uni<Long> addMessage(MessageUser messageUser, String message);

    Uni<Long> addUndelivered(MessageUser messageUser, List<String> undelivered, Long messageId)
      throws ExecutionException, InterruptedException;

    Uni<Map<String, Integer>> processUserMessages(WebSocketConnection ws, MessageUser messageUser)
      throws Exception;

    MessageUser createMessageUser();

    Uni<MessageUser> selectUser(MessageUser messageUser)
      throws IOException;

    Uni<String> buildUsersJson(MessageUser messageUser)
      throws IOException;

    void setSessionFactory(Mutiny.SessionFactory sessionFactory);

}
