using System;
using Plus.HabboHotel.Rooms;
using Plus.HabboHotel.GameClients;
using Plus.Communication.Packets.Outgoing.Rooms.Chat;
using System.Threading.Tasks;

namespace Plus.HabboHotel.Rooms.Chat.Commands.User.Fun
{
    class AtiraCommand : IChatCommand
    {
        public string PermissionRequired
        {
            get { return ""; }
        }
        public string Parameters
        {
            get { return "%name%"; }
        }
        public string Description
        {
            get { return "Atira em outro jogador"; }
        }

        public void Execute(GameClients.GameClient Session, Rooms.Room Room, string[] Params)
        {
            if (Params.Length == 1)
            {
                Session.SendWhisper("Você deve digitar o nome de usuário!");
                return;
            }

            GameClient TargetClient = PlusEnvironment.GetGame().GetClientManager().GetClientByUsername(Params[1]);
            if (TargetClient == null)
            {
                Session.SendWhisper("Esse usuário não foi encontrado, talvez não no quarto ou não está conectado.");
                return;
            }

            RoomUser User = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
            if (User == null)
            {
                Session.SendWhisper("Esse usuário não foi encontrado, talvez não no quarto ou não está conectado.");
                return;
            }
            //RoomUser User2 = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Username);
            RoomUser TargetUser = Room.GetRoomUserManager().GetRoomUserByHabbo(TargetClient.GetHabbo().Id);
            if (TargetUser == null)
            {
                Session.SendWhisper("Erro ao localizar o usuário tenha ocorrido, talvez não esta conectado.");
                return;
            }

            if (TargetClient.GetHabbo().Username == Session.GetHabbo().Username)
            {
                Session.SendWhisper("* Estou a cometer suicídio *");
                return;
            }
            if (TargetUser == null)
                return;

            Task.Run(async delegate
            {
                if (!((Math.Abs(User.X - TargetUser.X) >= 2 && (Math.Abs(User.Y - TargetUser.Y) >= 2))))
                {

                    Room.SendMessage(new ChatComposer(User.VirtualId, "* Disparando em " + Params[1] + " *", 0, 1));
                    User.ApplyEffect(101);
                    TargetUser.ApplyEffect(133);

                    await Task.Delay(5000);

                    User.ApplyEffect(0);
                    TargetUser.ApplyEffect(0);
                }
                else
                {
                    Session.SendWhisper(Params[1] + " a bala não chega a esse usuário.");
                    return;
                }
            });
        }
    }
}
