package org.projectfloodlight.openflow.types;

import org.jboss.netty.buffer.ChannelBuffer;
import org.projectfloodlight.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;
    }
}
