using System;
using System.Threading.Tasks;
using WingsEmu.Game._Guri;
using WingsEmu.Game._Guri.Event;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Mates;
using WingsEmu.Game.Networking;
using WingsEmu.Game.Networking.Broadcasting;

namespace WingsEmu.Plugins.BasicImplementations.Guri;

public class EmoticonGuriHandler : IGuriHandler
{
    public long GuriEffectId => 10;

    public async Task ExecuteAsync(IClientSession session, GuriEvent e)
    {
        if (!e.User.HasValue)
        {
            return;
        }

        int effect;

        if (e.Data >= 973 && e.Data <= 999)
        {
            effect = e.Data + 4099;
        }
        else if (e.Data == 1000)
        {
            effect = e.Data + 4116;
        }
        else if (e.Data >= 9000 && e.Data <= 9028)
        {
            effect = e.Data - 3883;
        }
        else
        {
            return;
        }

        int id = Convert.ToInt32(e.User.Value);

        if (id == session.PlayerEntity.Id)
        {
            session.BroadcastEffect(effect, new EmoticonsBroadcast());
            return;
        }

        IMateEntity mateEntity = session.PlayerEntity.MateComponent.GetMate(s => s.Id == id);
        mateEntity?.MapInstance.Broadcast(mateEntity.GenerateEffectPacket(effect), new EmoticonsBroadcast());
    }
}