package com.magistr.app.service;

import com.magistr.app.config.tenant.TenantConfig;
import com.magistr.app.config.tenant.TenantSecretUpdateReceipt;

import java.util.Objects;

/**
 * Результат успешной lifecycle-мутации тенанта вместе с квитанцией персистенции.
 *
 * <p>Конфигурация копируется при создании и чтении, чтобы вызывающий код не мог изменить
 * уже активированный runtime-снимок через изменяемый DTO.</p>
 */
public final class TenantLifecycleMutationResult {

    private final TenantConfig tenant;
    private final TenantSecretUpdateReceipt receipt;

    public TenantLifecycleMutationResult(TenantConfig tenant, TenantSecretUpdateReceipt receipt) {
        this.tenant = copy(Objects.requireNonNull(tenant, "Конфигурация тенанта не задана"));
        this.receipt = Objects.requireNonNull(receipt, "Квитанция изменения tenant Secret не задана");
    }

    public TenantConfig tenant() {
        return copy(tenant);
    }

    public TenantSecretUpdateReceipt receipt() {
        return receipt;
    }

    private static TenantConfig copy(TenantConfig source) {
        return new TenantConfig(
                source.getName(),
                source.getDomain(),
                source.getUrl(),
                source.getUsername(),
                source.getPassword()
        );
    }
}
