using System;
using System.Runtime.InteropServices;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using PSO2SERVER.Protocol;
using PSO2SERVER.Database;

namespace PSO2SERVER.Models
{
    public class CharacterStruct
    {
        [StructLayout(LayoutKind.Sequential)]
        public unsafe struct LooksParam
        {
            public RunAnimation running_animation;
            public Race race;
            public Gender gender;
            public ushort Muscule;
            public Figure Body;
            public Figure Arms;
            public Figure Legs;
            public Figure Chest;
            public Figure FaceShape;
            public Figure FaceParts;
            public Figure Eyes;
            public Figure NoseSize;
            public Figure NoseHeight;
            public Figure Mouth;
            public Figure Ears;
            public Figure Neck;
            public Figure Waist;
            public Figure Body2;
            public Figure Arms2;
            public Figure Legs2;
            public Figure Chest2;
            public Figure Neck2;
            public Figure Waist2;
            public fixed byte Unk1[0x20];
            public fixed byte Unk2[0x0A];
            public AccessoryData Acc1Location;
            public AccessoryData Acc2Location;
            public AccessoryData Acc3Location;
            public AccessoryData Acc4Location;
            public HSVColor UnkColor;
            public HSVColor CostumeColor;
            public HSVColor MainColor;
            public HSVColor Sub1Color;
            public HSVColor Sub2Color;
            public HSVColor Sub3Color;
            public HSVColor EyeColor;
            public HSVColor HairColor;
            public fixed byte Unk3[0x20];
            public fixed byte Unk4[0x10];
            public ushort CostumeId;
            public ushort BodyPaint1;
            public ushort StickerId;
            public ushort RightEyeId;
            public ushort EyebrowId;
            public ushort EyelashId;
            public ushort FaceId1;
            public ushort FaceId2;
            public ushort Facemakeup1Id;
            public ushort HairstyleId;
            public ushort Acc1Id;
            public ushort Acc2Id;
            public ushort Acc3Id;
            public ushort Facemakeup2Id;
            public ushort LegId;
            public ushort ArmId;
            public ushort Acc4Id;
            public fixed byte Unk5[0x04];
            public ushort BodyPaint2;
            public ushort LeftEyeId;
            public fixed byte Unk6[0x12];
            public AccessoryData Acc1Size;
            public AccessoryData Acc2Size;
            public AccessoryData Acc3Size;
            public AccessoryData Acc4Size;
            public AccessoryData Acc1Rotation;
            public AccessoryData Acc2Rotation;
            public AccessoryData Acc3Rotation;
            public AccessoryData Acc4Rotation;
            public ushort Unk7;
            public fixed byte Unk8[0x08];
            public SkinColor SkinColorType;
            public sbyte EyebrowThickness;
        }

        [StructLayout(LayoutKind.Sequential)]
        public unsafe struct JobParam
        {
            public ClassType mainClass;//1
            public ClassType subClass;//1
            public ushort unk2;//2
            public ClassTypeField enabledClasses;//2
            public ushort unk3;//2
            public Entries entries; //TODO: Make this a fixed array 24 * 8
            public fixed ushort unk_maxlevel[15];//30
        }
    }
}
