// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.builtin.adventure.objectives.transaction;

import com.hypixel.hytale.event.EventRegistry;
import javax.annotation.Nonnull;
import com.hypixel.hytale.function.consumer.BooleanConsumer;

public class RegistrationTransactionRecord extends TransactionRecord
{
    protected BooleanConsumer registration;
    
    public RegistrationTransactionRecord(final BooleanConsumer registration) {
        this.registration = registration;
    }
    
    @Override
    public void revert() {
        this.registration.accept(false);
    }
    
    @Override
    public void complete() {
        this.registration.accept(false);
    }
    
    @Override
    public void unload() {
        this.registration.accept(false);
    }
    
    @Override
    public boolean shouldBeSerialized() {
        return false;
    }
    
    @Nonnull
    @Override
    public String toString() {
        return "RegistrationTransactionRecord{registration=" + String.valueOf(this.registration) + "} " + super.toString();
    }
    
    @Nonnull
    public static TransactionRecord[] wrap(@Nonnull final EventRegistry registry) {
        final BooleanConsumer[] registrations = registry.getRegistrations().toArray(BooleanConsumer[]::new);
        final TransactionRecord[] records = new TransactionRecord[registrations.length];
        int i = 0;
        for (final BooleanConsumer registration : registrations) {
            records[i++] = new RegistrationTransactionRecord(registration);
        }
        return records;
    }
    
    @Nonnull
    public static TransactionRecord[] append(@Nonnull final TransactionRecord[] arr, @Nonnull final EventRegistry registry) {
        final BooleanConsumer[] registrations = registry.getRegistrations().toArray(BooleanConsumer[]::new);
        final TransactionRecord[] records = new TransactionRecord[arr.length + registrations.length];
        System.arraycopy(arr, 0, records, 0, arr.length);
        int i = registrations.length;
        for (final BooleanConsumer registration : registrations) {
            records[i++] = new RegistrationTransactionRecord(registration);
        }
        return records;
    }
}
