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

package com.hypixel.hytale.protocol.packets.asseteditor;

import java.util.Objects;
import com.hypixel.hytale.protocol.io.ValidationResult;
import io.netty.buffer.ByteBuf;
import javax.annotation.Nonnull;
import com.hypixel.hytale.protocol.Packet;

public class AssetEditorCapabilities implements Packet
{
    public static final int PACKET_ID = 304;
    public static final boolean IS_COMPRESSED = false;
    public static final int NULLABLE_BIT_FIELD_SIZE = 0;
    public static final int FIXED_BLOCK_SIZE = 5;
    public static final int VARIABLE_FIELD_COUNT = 0;
    public static final int VARIABLE_BLOCK_START = 5;
    public static final int MAX_SIZE = 5;
    public boolean canDiscardAssets;
    public boolean canEditAssets;
    public boolean canCreateAssetPacks;
    public boolean canEditAssetPacks;
    public boolean canDeleteAssetPacks;
    
    @Override
    public int getId() {
        return 304;
    }
    
    public AssetEditorCapabilities() {
    }
    
    public AssetEditorCapabilities(final boolean canDiscardAssets, final boolean canEditAssets, final boolean canCreateAssetPacks, final boolean canEditAssetPacks, final boolean canDeleteAssetPacks) {
        this.canDiscardAssets = canDiscardAssets;
        this.canEditAssets = canEditAssets;
        this.canCreateAssetPacks = canCreateAssetPacks;
        this.canEditAssetPacks = canEditAssetPacks;
        this.canDeleteAssetPacks = canDeleteAssetPacks;
    }
    
    public AssetEditorCapabilities(@Nonnull final AssetEditorCapabilities other) {
        this.canDiscardAssets = other.canDiscardAssets;
        this.canEditAssets = other.canEditAssets;
        this.canCreateAssetPacks = other.canCreateAssetPacks;
        this.canEditAssetPacks = other.canEditAssetPacks;
        this.canDeleteAssetPacks = other.canDeleteAssetPacks;
    }
    
    @Nonnull
    public static AssetEditorCapabilities deserialize(@Nonnull final ByteBuf buf, final int offset) {
        final AssetEditorCapabilities obj = new AssetEditorCapabilities();
        obj.canDiscardAssets = (buf.getByte(offset + 0) != 0);
        obj.canEditAssets = (buf.getByte(offset + 1) != 0);
        obj.canCreateAssetPacks = (buf.getByte(offset + 2) != 0);
        obj.canEditAssetPacks = (buf.getByte(offset + 3) != 0);
        obj.canDeleteAssetPacks = (buf.getByte(offset + 4) != 0);
        return obj;
    }
    
    public static int computeBytesConsumed(@Nonnull final ByteBuf buf, final int offset) {
        return 5;
    }
    
    @Override
    public void serialize(@Nonnull final ByteBuf buf) {
        buf.writeByte(this.canDiscardAssets ? 1 : 0);
        buf.writeByte(this.canEditAssets ? 1 : 0);
        buf.writeByte(this.canCreateAssetPacks ? 1 : 0);
        buf.writeByte(this.canEditAssetPacks ? 1 : 0);
        buf.writeByte(this.canDeleteAssetPacks ? 1 : 0);
    }
    
    @Override
    public int computeSize() {
        return 5;
    }
    
    public static ValidationResult validateStructure(@Nonnull final ByteBuf buffer, final int offset) {
        if (buffer.readableBytes() - offset < 5) {
            return ValidationResult.error("Buffer too small: expected at least 5 bytes");
        }
        return ValidationResult.OK;
    }
    
    public AssetEditorCapabilities clone() {
        final AssetEditorCapabilities copy = new AssetEditorCapabilities();
        copy.canDiscardAssets = this.canDiscardAssets;
        copy.canEditAssets = this.canEditAssets;
        copy.canCreateAssetPacks = this.canCreateAssetPacks;
        copy.canEditAssetPacks = this.canEditAssetPacks;
        copy.canDeleteAssetPacks = this.canDeleteAssetPacks;
        return copy;
    }
    
    @Override
    public boolean equals(final Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj instanceof final AssetEditorCapabilities other) {
            return this.canDiscardAssets == other.canDiscardAssets && this.canEditAssets == other.canEditAssets && this.canCreateAssetPacks == other.canCreateAssetPacks && this.canEditAssetPacks == other.canEditAssetPacks && this.canDeleteAssetPacks == other.canDeleteAssetPacks;
        }
        return false;
    }
    
    @Override
    public int hashCode() {
        return Objects.hash(this.canDiscardAssets, this.canEditAssets, this.canCreateAssetPacks, this.canEditAssetPacks, this.canDeleteAssetPacks);
    }
}
