package org.openflow.types;

import org.jboss.netty.buffer.ChannelBuffer;
import org.openflow.exceptions.OFParseError;

public enum IpEcn implements OFValueType<IpEcn> {
    ECN_00((byte)0),
    ECN_01((byte)1),
    ECN_10((byte)2),
    ECN_11((byte)3),
    ECN_NO_MASK((byte)0xFF);
    
    public static final IpEcn NO_MASK = ECN_NO_MASK;
    public static final IpEcn FULL_MASK = ECN_00;

    static final int LENGTH = 1;
    
    private final byte ecn;
    
    private IpEcn(byte ecn) {
        this.ecn = ecn;
    }
    
    public static IpEcn of(byte ecn) {
        switch (ecn) {
            case 0:
                return ECN_00;
            case 1:
                return ECN_01;
            case 2:
                return ECN_10;
            case 3:
                return ECN_11;
            default:
                throw new IllegalArgumentException("Illegal IP ECN value: " + ecn);
        }
    }

    @Override
    public int getLength() {
        return LENGTH;
    }

    @Override
    public String toString() {
        return (ecn < 3 ? "0" : "") + Integer.toBinaryString(ecn);
    }

    public void writeByte(ChannelBuffer c) {
        c.writeByte(this.ecn);
    }

    public static IpEcn readByte(ChannelBuffer c) throws OFParseError {
        return IpEcn.of((byte)(c.readUnsignedByte()));
    }

    @Override
    public IpEcn applyMask(IpEcn mask) {
        return IpEcn.of((byte)(this.ecn & mask.ecn));
    }

    public byte getEcnValue() {
        return ecn;
    }
}
