using GameServer.Controllers.Attributes;
using GameServer.Models;
using GameServer.Network;
using GameServer.Network.Messages;
using GameServer.Systems.Event;
using Protocol;

namespace GameServer.Controllers;
internal class PlayerInfoController : Controller
{
    public PlayerInfoController(PlayerSession session) : base(session)
    {
        // PlayerInfoController.
    }

    [GameEvent(GameEventType.EnterGame)]
    public async Task OnEnterGame(ModelManager modelManager)
    {
        PlayerModel player = modelManager.Player;

        BasicInfoNotify basicInfo = new()
        {
            RandomSeed = 1337,
            Id = player.Id,
            Birthday = 0,
            Attributes =
            {
                new PlayerAttr
                {
                    Key = (int)PlayerAttrKey.Name,
                    ValueType = (int)PlayerAttrType.String,
                    StringValue = player.Name
                },
                new PlayerAttr
                {
                    Key = (int)PlayerAttrKey.Level,
                    ValueType = (int)PlayerAttrType.Int32,
                    Int32Value = 10
                },
                new PlayerAttr
                {
                    Key = (int)PlayerAttrKey.HeadPhoto,
                    ValueType = (int)PlayerAttrType.Int32,
                    Int32Value = 1402
                },
                new PlayerAttr
                {
                    Key = (int)PlayerAttrKey.HeadFrame,
                    ValueType = (int)PlayerAttrType.Int32,
                    Int32Value = 80060009
                },
                new PlayerAttr
                {
                    Key = (int)PlayerAttrKey.Sex,
                    ValueType = (int)PlayerAttrType.Int32,
                    Int32Value = 1
                }
            },
            RoleShowList =
            {
                new RoleShowEntry
                {
                    Level = 1,
                    RoleId = 1501 // Rover
                }
            },
            CurCardId = 80060000,
            CardUnlockList =
            {
                new CardShowEntry
                {
                    CardId = 80060000,
                    IsRead = true
                }
            }
        };

        await Session.Push(MessageId.BasicInfoNotify, basicInfo);
    }

    [NetEvent(MessageId.PlayerBasicInfoGetRequest)]
    public RpcResult OnPlayerBasicInfoGetRequest()
    {
        return Response(MessageId.PlayerBasicInfoGetResponse, new PlayerBasicInfoGetResponse
        {
            Info = new PlayerDetails
            {
                Name = "Yangyang",
                Signature = "discord.gg/reversedrooms",
                HeadId = 1402,
                PlayerId = 1338,
                IsOnline = true,
                LastOfflineTime = -1,
                Level = 5
            }
        });
    }
}
