/***
@overview Life of German - Wanted (Wanted.cs)
@author kookroach
@copyright (c) 2008 - 2019 Life of German
*/

using System.Collections.Generic;
using GTANetworkAPI;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Extensions;

namespace ReallifeGamemode.Server.Wanted
{
  public class WantedEscapeTimer
  {
    public static Dictionary<int, int> waTimer { get; set; } = new Dictionary<int, int>(); //zeit in ms
    /*
    public static void WantedTimer()
    {
      //System.Timers.Timer timer = new System.Timers.Timer(2500);
      //timer.Start();
      //timer.Elapsed += Timer_Elapsed;
    }
    */

    public static void ResetWantedTimeToElapse(Player client)
    {
      User user = client.GetUser();
      if (user.FactionId == 1 || user.FactionId == 3)
        return;

      waTimer[user.Id] = 300000;
    }

    public static void Timer_Elapsed()
    {
      foreach (var player in NAPI.Pools.GetAllPlayers())
      {
        User user = player.GetUser();
        if (user != null && user.Wanteds > 0)
        {
          if (!waTimer.ContainsKey(user.Id))
            ResetWantedTimeToElapse(player);

          bool isNearCop = false;
          foreach (var playerCop in NAPI.Pools.GetAllPlayers())
          {
            if (!playerCop.IsLoggedIn()) continue;

            User cop = playerCop.GetUser();
            if (cop != null && (cop.FactionId == 1 || cop.FactionId == 3))
            {
              if (cop.GetData<bool>("duty") && playerCop.Position.DistanceTo2D(player.Position) <= 500)
              {
                //Schriftzug 'abgetaucht' zerstören :(
                isNearCop = true;
                break;
              }
              //Hier abgetaucht schriftzug einfügen :)
            }
          }

          if (!waTimer.ContainsKey(user.Id))
            waTimer[user.Id] = 300000;

          if (waTimer[user.Id] <= 0)
          {
            ResetWantedTimeToElapse(player);
            player.SendChatMessage("~y~Du hast erfolgtreich einen Wanted abgetaucht.");
            using (var dbContext = new DatabaseContext())
            {
              player.GetUser(dbContext).Wanteds -= 1;
              if (player.GetUser(dbContext).Wanteds == 0)
              {
                switch (player.GetUser(dbContext).FactionId)
                {
                  case null:
                    player.SetSharedData("blipColor", 0);
                    break;

                  case 8:
                    player.SetSharedData("blipColor", 83);
                    break;

                  case 7:
                    player.SetSharedData("blipColor", 52);
                    break;

                  case 4:
                    player.SetSharedData("blipColor", 5);
                    break;
                }
              }
              dbContext.SaveChanges();
            }
          }

          if (!isNearCop)
            waTimer[user.Id] -= 2500;
        }
      }
    }
  }
}
