package de.ozgcloud.xta.client;

import org.apache.commons.lang3.NotImplementedException;

import de.ozgcloud.xta.client.config.XtaClientConfig;
import de.ozgcloud.xta.client.core.WrappedXtaService;
import de.ozgcloud.xta.client.model.Identifier;
import de.ozgcloud.xta.client.model.XtaMessage;
import de.ozgcloud.xta.client.model.XtaMessageMetaDataAndHeader;
import genv3.de.xoev.transport.xta.x211.PermissionDeniedException;
import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemException;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
@Builder(access = AccessLevel.PROTECTED)
@Getter(AccessLevel.PROTECTED)
public class XtaClient {

	private final WrappedXtaService service;
	private final XtaClientConfig config;

	public XtaMessageMetaDataAndHeader getMessagesMetadata(String xtaIdentifier)
			throws XTAWSTechnicalProblemException, PermissionDeniedException {
		var clientIdentifier = deriveIdentifier(xtaIdentifier);
		service.checkAccountActive(clientIdentifier);
		return getStatusList(clientIdentifier);
	}

	public XtaMessageMetaDataAndHeader getNextMessagesMetadata(String xtaIdentifier)
			throws XTAWSTechnicalProblemException, PermissionDeniedException {
		return getStatusList(deriveIdentifier(xtaIdentifier));
	}

	private XtaMessageMetaDataAndHeader getStatusList(Identifier clientIdentifier) throws XTAWSTechnicalProblemException, PermissionDeniedException {
		return service.getStatusList(clientIdentifier, config.getMaxListItems());
	}

	Identifier deriveIdentifier(String xtaIdentifier) {
		return Identifier.builder().value(xtaIdentifier).build();
	}

	public XtaMessage getMessage(String messageId) {
		throw new NotImplementedException("");
	}

	public void close(String messageId) {
		throw new NotImplementedException("");
	}
}