/*
 *
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 */

package org.apache.flex.swf;

/**
 * Type code of a SWF tag.
 * 
 * @see SWF File Format Specification Version 10.
 */
public enum TagType
{
    End(0),
    ShowFrame(1),
    DefineShape(2),
    PlaceObject(4),
    RemoveObject(5),
    DefineBits(6),
    DefineButton(7),
    JPEGTables(8),
    SetBackgroundColor(9),
    DefineFont(10),
    DefineText(11),
    DoAction(12),
    DefineFontInfo(13),
    DefineSound(14),
    StartSound(15),
    DefineButtonSound(17),
    SoundStreamHead(18),
    SoundStreamBlock(19),
    DefineBitsLossless(20),
    DefineBitsJPEG2(21),
    DefineShape2(22),
    DefineButtonCxform(23),
    Protect(24),
    PlaceObject2(26),
    RemoveObject2(28),
    DefineShape3(32),
    DefineText2(33),
    DefineButton2(34),
    DefineBitsJPEG3(35),
    DefineBitsLossless2(36),
    DefineEditText(37),
    DefineSprite(39),
    ProductInfo(41), // TODO not in spec, verify this is necessary
    FrameLabel(43),
    SoundStreamHead2(45),
    DefineMorphShape(46),
    DefineFont2(48),
    ExportAssets(56),
    ImportAssets(57),
    EnableDebugger(58),
    DoInitAction(59),
    DefineVideoStream(60),
    VideoFrame(61),
    DefineFontInfo2(62),
    DebugID(63), // TODO not documented in the spec
    EnableDebugger2(64),
    ScriptLimits(65),
    SetTabIndex(66),
    FileAttributes(69),
    PlaceObject3(70),
    ImportAssets2(71),
    DefineFontAlignZones(73),
    CSMTextSettings(74),
    DefineFont3(75),
    SymbolClass(76),
    Metadata(77),
    DefineScalingGrid(78),
    DoABC_OLD(72), // TODO resolve this with DoABC from spec
    DoABC(82),
    DefineShape4(83),
    DefineMorphShape2(84),
    DefineSceneAndFrameLabelData(86),
    DefineBinaryData(87),
    DefineFontName(88),
    StartSound2(89),
    DefineBitsJPEG4(90),
    DefineFont4(91),
    EnableTelemetry(93),
    Undefined(-1);

    private final int value;

    /**
     * Bind the integer tag value with a field.
     * 
     * @param value tag type code
     */
    private TagType(int value)
    {
        this.value = value;
    }

    /**
     * Get the integer tag type code.
     * 
     * @return tag type code
     */
    public int getValue()
    {
        return value;
    }

    /**
     * Reverse lookup TagType by its type code value.
     * 
     * @param value type code
     * @return TagType enum value
     */
    public static TagType getTagType(int value)
    {
        for (TagType tagType : TagType.values())
        {
            if (tagType.value == value)
                return tagType;
        }

        return Undefined;
    }
}
