package de.ozgcloud.admin.setting;

import de.ozgcloud.admin.common.organisationseinheit.OrganisationsEinheitSettingsService;
import de.ozgcloud.admin.organisationseinheit.OrganisationsEinheitSettings;
import de.ozgcloud.admin.setting.postfach.PostfachSettingBody;
import java.util.Map;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
class SettingService {
	private static final String POSTFACH_SETTING_ITEM_NAME = "Postfach";

	private final SettingRepository repository;
	private final SettingMapper mapper;

	private final OrganisationsEinheitSettingsService oeService;

	public AlfaSettingDTO getAlfaSettingDTO() {
		var postfachData = getSettingWithPostfachFromDb();
		Map<String, OrganisationsEinheitSettings> settings = oeService.getSettings();

		return AlfaSettingDTO.builder()
				.signatur(postfachData.getSignatur())
				.organisationsEinheitSettingsMap(settings)
				.build();
	}

	public VorgangManagerSettingDTO getVorgangManagerSettingDTO() {
		var postfachData = getSettingWithPostfachFromDb();
		Map<String, OrganisationsEinheitSettings> settings = oeService.getSettings();

		return VorgangManagerSettingDTO.builder()
				.absender(mapper.mapAbsenderToAbsenderVorgangManager(postfachData.getAbsender()))
				.signatur(postfachData.getSignatur())
				.organisationsEinheitSettingsMap(settings)
				.build();
	}

	PostfachSettingBody getSettingWithPostfachFromDb() {
		var postfach = repository.findOneByName(POSTFACH_SETTING_ITEM_NAME);
		return postfach.isPresent() ? (PostfachSettingBody) postfach.get().getSettingBody() : PostfachSettingBody.builder().build();
	}
}