using System;
using PSO2SERVER.Json;
using System.Collections.Generic;
using PSO2SERVER.Models;

namespace PSO2SERVER.Protocol.Packets
{
    public class QuestCategoryPacket : Packet
    {
        private List<QuestData> questdefs;

        public QuestCategoryPacket(List<QuestData> questdefs)
        {
            this.questdefs = questdefs;
        }

        public override byte[] Build()
        {
            PacketWriter pkt = new PacketWriter();
            pkt.WriteMagic((uint)questdefs.Count, 0x1DB0, 0xC5);
            foreach (QuestData d in questdefs)
            {
                var qd = d.QuestDefiniton;
                pkt.WriteFixedLengthASCII(qd.Date, 0x20);
                pkt.WriteObjectHeader(qd.QuestObj);
                pkt.Write(qd.NameId);
                pkt.WriteIntArray(qd.Unk3);
                pkt.Write(qd.Unk4);
                pkt.Write(qd.Unk5);
                pkt.Write(qd.Unk6);
                pkt.WriteIntArray(qd.Unk7);
                pkt.WriteShortArray(qd.Unk8);
                pkt.Write(qd.Length);
                pkt.Write((byte)qd.PartyType);
                pkt.Write((byte)qd.Difficulties);
                pkt.Write((byte)qd.DifficultiesCompleted);
                pkt.Write(qd.Unk9);
                pkt.Write(qd.ReqLevel);
                pkt.Write(qd.SubClassReqLevel);
                pkt.Write(qd.EnemyLevel);
                pkt.Write(qd.Unk10);
                pkt.Write((byte)qd.QuestType);
                pkt.Write(qd.Unk11);
                pkt.Write(qd.Unk12);
                pkt.WriteIntArray(qd.Unk13);
                pkt.Write(qd.Unk14);
                pkt.Write(qd.Unk15);
                pkt.Write(qd.Unk16);

            }
            return pkt.ToArray();
        }

        public override PacketHeader GetHeader()
        {
            return new PacketHeader(0x0B, 0x18, PacketFlags.PACKED);
        }
    }
}
