using System;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;

using Barotrauma;
using HarmonyLib;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
using System.IO;

namespace FastForward
{
  public partial class Mod : IAssemblyPlugin
  {
    public Harmony harmony;

    public static Keys FFPressKey = Keys.Q;
    public static Keys FFToggleKey = Keys.None;
    public static bool FFToggleKeyPressed = false;
    public static bool FFState = false;
    public static int FFSpeed = 3;

    public void Initialize()
    {
      harmony = new Harmony("fastforward");

      createFolders();
      loadSettings();
      saveSettings();

      addCommands();

      harmony.Patch(
        original: typeof(GameMain).GetMethod("Update", AccessTools.all),
        postfix: new HarmonyMethod(typeof(Mod).GetMethod("GameMain_Update_Postfix"))
      );
    }

    public void Dispose()
    {
      harmony.UnpatchAll(harmony.Id);
      harmony = null;
      removeCommands();
    }
    public void OnLoadCompleted() { }
    public void PreInitPatching() { }

    public static void log(object msg, Color? cl = null, string line = "")
    {
      if (cl == null) cl = Color.Cyan;
      LuaCsLogger.LogMessage($"{line}{msg ?? "null"}", cl, cl);
    }
  }
}