using PSO2SERVER.Models;
using System;
using System.Runtime.InteropServices;
using System.Text;

namespace PSO2SERVER.Protocol.Packets
{
    public class SkitItemAddResponsePacket : Packet
    {
        // Skit name - fixed length of 0x20 bytes (32 bytes).
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)]
        public byte[] skit_name;

        // Unknown field (u32)
        public uint unk;

        // 默认构造函数
        public SkitItemAddResponsePacket()
        {
            // 默认情况下，skit_name 初始化为空的字节数组
            skit_name = new byte[0x20];
        }

        // 带参数的构造函数，方便直接初始化字段
        public SkitItemAddResponsePacket(string skitName, uint unkValue)
        {
            // 初始化 skit_name 字段为 32 字节
            skit_name = new byte[0x20];
            // 将字符串转换为字节数组并填充到 skit_name 中
            byte[] nameBytes = Encoding.ASCII.GetBytes(skitName);
            Array.Copy(nameBytes, skit_name, Math.Min(nameBytes.Length, 0x20));
            // 设置 unk 字段的值
            unk = unkValue;
        }

        // 获取 skit_name 字段作为字符串，去除 null 字符
        public string GetSkitName()
        {
            return Encoding.ASCII.GetString(skit_name).TrimEnd('\0');
        }

        #region implemented abstract members of Packet

        // 构建数据包的方法
        public override byte[] Build()
        {
            var pkt = new PacketWriter();

            // 写入 skit_name 字段
            pkt.Write(skit_name, 0, skit_name.Length);

            // 写入 unk 字段
            pkt.Write(unk);

            // 返回构建好的字节数组
            return pkt.ToArray();
        }

        // 获取数据包头
        public override PacketHeader GetHeader()
        {
            return new PacketHeader(0x23, 0x0C, PacketFlags.None);
        }

        #endregion
    }
}
