/*
 * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
 * Ministerpräsidenten des Landes Schleswig-Holstein
 * Staatskanzlei
 * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
 *
 * Lizenziert unter der EUPL, Version 1.2 oder - sobald
 * diese von der Europäischen Kommission genehmigt wurden -
 * Folgeversionen der EUPL ("Lizenz");
 * Sie dürfen dieses Werk ausschließlich gemäß
 * dieser Lizenz nutzen.
 * Eine Kopie der Lizenz finden Sie hier:
 *
 * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
 *
 * Sofern nicht durch anwendbare Rechtsvorschriften
 * gefordert oder in schriftlicher Form vereinbart, wird
 * die unter der Lizenz verbreitete Software "so wie sie
 * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
 * ausdrücklich oder stillschweigend - verbreitet.
 * Die sprachspezifischen Genehmigungen und Beschränkungen
 * unter der Lizenz sind dem Lizenztext zu entnehmen.
 */
package de.ozgcloud.document;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextProvider;
import de.ozgcloud.apilib.common.command.OzgCloudCommandService;
import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
import de.ozgcloud.apilib.common.command.grpc.GrpcOzgCloudCommandService;
import de.ozgcloud.apilib.user.GrpcOzgCloudUserProfileService;
import de.ozgcloud.apilib.user.OzgCloudUserProfileService;
import de.ozgcloud.apilib.user.UserProfileMapper;
import de.ozgcloud.document.bescheid.common.callcontext.BescheidManagerCallContextProvider;
import de.ozgcloud.user.grpc.userprofile.UserProfileServiceGrpc;
import de.ozgcloud.vorgang.grpc.command.CommandServiceGrpc;
import net.devh.boot.grpc.client.inject.GrpcClient;

@Configuration
public class DocumentManagerConfiguration {

	private static final String GRPC_USER_MANAGER_NAME = "user-manager";
	private static final String GRPC_COMMAND_MANAGER_NAME = "command-manager";

	public static final String COMMAND_SERVICE_NAME = "bescheid_OzgCloudCommandService";
	public static final String USER_PROFILE_SERVICE_NAME = "bescheid_OzgCloudUserProfileService";

	@GrpcClient(GRPC_COMMAND_MANAGER_NAME)
	private CommandServiceGrpc.CommandServiceBlockingStub commandServiceStub;
	@GrpcClient(GRPC_USER_MANAGER_NAME)
	private UserProfileServiceGrpc.UserProfileServiceBlockingStub userProfileServiceStub;

	@Bean(COMMAND_SERVICE_NAME)
	OzgCloudCommandService grpcOzgCloudCommandService(CommandMapper commandMapper, BescheidManagerCallContextProvider contextProvider) {
		return new GrpcOzgCloudCommandService(commandServiceStub, commandMapper, contextProvider,
				GrpcOzgCloudCommandService.DEFAULT_COMMAND_REQUEST_THRESHOLD_MILLIS);
	}

	@Bean(USER_PROFILE_SERVICE_NAME)
	OzgCloudUserProfileService grpcOzgCloudUserProfileService(UserProfileMapper mapper, OzgCloudCallContextProvider contextProvider) {
		return new GrpcOzgCloudUserProfileService(userProfileServiceStub, mapper, contextProvider);
	}
}