using System;
using System.Collections.Generic;
using System.Text;
using Halo3Map.Data;

namespace Halo3Map.Tags.Layouts
{
    /// <summary>
    /// 12/10/07 Added Basic Tag Layout - shade45 
    /// </summary>
    [Tag("shade45", "mode", 0.1)]
    public class mode : H3Tag
    {
        public int Unknown;
        public int Unknown4;
        public int Unknown8;

        public H3Reflexive<Unkn12> Unknown12;
        [Size(16)]
        public class Unkn12 : Chunk
        {
            public int Unknown;

            public H3Reflexive<Unkn4> Unknown4;
            [Size(16)]
            public class Unkn4 : Chunk
            {
                public int Unknown;
                public int Unknown4;
                public int Unknown8;
                public int Unknown12;
            }
        }

        [Size(24)]
        public byte[] Unknown24;

        public H3Reflexive<Unkn48> Unknown48;
        [Size(96)]
        public class Unkn48 : Chunk
        {
            public int Unknown;
            public int Unknown4;
            public int Unknown8;
            public int Unknown12;
            public int Unknown16;
            public int Unknown20;
            public float Unknown24;
            public float Unknown28;
            public float Unknown32;
            public float Unknown36;
            public float Unknown48;
            public float Unknown52;
            public float Unknown56;
            public float Unknown60;
            public float Unknown64;
            public float Unknown68;
            public float Unknown72;
            public float Unknown76;
            public float Unknown80;
            public float Unknown84;
            public float Unknown88;
            public float Unknown92;
        }

        [Size(12)]
        public byte[] Unknown60;

        public H3Reflexive<Unkn72> Unknown72;
        [Size(36)]
        public class Unkn72 : Chunk
        {
            public TagReference RealModelShader;
            [Size(20)]
            public byte[] Unknown16;
        }

        [Size(16)]
        public byte[] Unknown84;

        public int Unknown100;

        public H3Reflexive<Unkn104> Unknown104;
        [Size(76)]
        public class Unkn104 : Chunk
        {
            public H3Reflexive<Unkn> Unknown;
            [Size(16)]
            public class Unkn : Chunk
            {
                public int Unknown;
                public int Unknown4;
                public int Unknown8;
                public int Unknown12;
            }

            public H3Reflexive<Unkn12> Unknown12;
            [Size(8)]
            public class Unkn12 : Chunk
            {
                public short Unknown;
                public short Unknown2;
                public int Unknown4;
            }

            public int Unknown24;
            public int Unknown28;
            public int Unknown32;
            public int Unknown36;
            public int Unknown40;
            public int Unknown44;
            public int Unknown48;

            [Size(24)]
            public byte[] Unknown52;
        }

        public H3Reflexive<Unkn116> Unknown116;
        [Size(44)]
        public class Unkn116 : Chunk
        {
            public int Unknown;
            public float Unknown4;
            public float Unknown8;
            public float Unknown12;
            public float Unknown16;
            public float Unknown20;
            public float Unknown24;
            public float Unknown28;
            public float Unknown32;
            public float Unknown36;
            public float Unknown40;
        }

        public H3Reflexive<Unkn128> Unknown128;
        [Size(48)]
        public class Unkn128 : Chunk
        {
            [Size(16)]
            public byte[] Unknown;

            public float Unknown16;
            public float Unknown20;
            public float Unknown24;
            public float Unknown28;
            public float Unknown32;
            public float Unknown36;

            [Size(8)]
            public byte[] Unknown40;
        }

        [Size(48)]
        public byte[] Unknown140;

        public H3Reflexive<Unkn188> Unknown188;
        [Size(12)]
        public class Unkn188 : Chunk
        {
            public H3Reflexive<Unkn> Unknown;
            [Size(48)]
            public class Unkn : Chunk
            {
                [Size(16)]
                public byte[] Unknown;

                public float Unknown16;
                public float Unknown20;
                public float Unknown24;
                public float Unknown28;
                public float Unknown32;
                public float Unknown36;

                [Size(8)]
                public byte[] Unknown40;
            }
        }

        [Size(24)]
        public byte[] Unknown200;

        public short RawID;
        public short RawIndex;

        [Size(4)]
        public byte[] Unknown228;

        public H3Reflexive<Unkn232> Unknown232;
        [Size(28)]
        public class Unkn232 : Chunk
        {
            public float Unknown;
            public float Unknown4;
            public float Unknown8;
            public float Unknown12;
            public float Unknown16;
            public float Unknown20;
            public float Unknown24;
        }

        public float Unknown244;
        public float Unknown248;
        public float Unknown252;
        public float Unknown256;
        public float Unknown260;
        public float Unknown264;
        public float Unknown268;
        public float Unknown272;
        public float Unknown276;

        [Size(28)]
        public byte[] Unknown280;

        public float Unknown308;
        public float Unknown312;
        public float Unknown316;
        public float Unknown320;
        public float Unknown324;
        public float Unknown328;
        public float Unknown332;
        public float Unknown336;
        public float Unknown340;

        [Size(28)]
        public byte[] Unknown344;

        public float Unknown372;
        public float Unknown376;
        public float Unknown380;
        public float Unknown384;
        public float Unknown388;
        public float Unknown392;
        public float Unknown396;
        public float Unknown400;
        public float Unknown404;

        [Size(40)]
        public byte[] Unknown408;

        public H3Reflexive<Unkn448> Unknown448;
        [Size(32)]
        public class Unkn448 : Chunk
        {
            public float Unknown;
            public float Unknown4;
            public float Unknown8;
            public float Unknown12;
            public float Unknown16;
            public float Unknown20;
            public float Unknown24;
            public float Unknown28;
        }
    }
}
