using System.Linq;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using HarmonyLib.Tools;

namespace Regiments {
    [BepInPlugin(pluginGuid, pluginName, pluginVersion)]
    public class Main : BaseUnityPlugin {
        private const string pluginGuid = "CykaMod";
        private const string pluginName = "CykaMod";
        private const string pluginVersion = "1.0.0";

        public static ConfigEntry<float> SPMultiplier;
        public static ConfigEntry<float> TPMultiplier;
        public static ConfigEntry<float> SupplyAOEMultiplier;
        public static ConfigEntry<float> HQAOEMultiplier;
        public static ConfigEntry<float> SupplyAmountMultiplier;
        public static ConfigEntry<float> FireRateMultiplier;
        public static ConfigEntry<float> AimIntervalMultiplier;
        public static ConfigEntry<float> SupplyRateMultiplier;
        // public static ConfigEntry<float> magnetRadiusMultiplier;
        // public static ConfigEntry<float> beamStrenghtMultiplier;
        // public static ConfigEntry<float> beamRadiusMultiplier;
        // public static ConfigEntry<float> fuelTankRefillMultiplier;
        // public static ConfigEntry<float> fuelTankCapacityMultiplier;
        // public static ConfigEntry<float> minerGroundArea;
        // public static ConfigEntry<float> minerMiningSpeed;
        // public static ConfigEntry<float> wheelTorqueMultiplier;
        // public static ConfigEntry<float> wheelSpeedMultiplier;
        // public static ConfigEntry<float> jetThrustMultiplier;

        public void Awake() {
            SPMultiplier = Config.Bind("General", "SP Multiplier", 1f,
                new ConfigDescription("SP Multiplier", new AcceptableValueRange<float>(1f, 32f)));
            TPMultiplier = Config.Bind("General", "TP Multiplier", 1f,
                new ConfigDescription("TP Multiplier", new AcceptableValueRange<float>(1f, 32f)));
            SupplyAOEMultiplier = Config.Bind("General", "Supply AOE Multiplier", 1f,
                new ConfigDescription("Supply AOE Multiplier", new AcceptableValueRange<float>(1f, 32f)));
            SupplyAmountMultiplier = Config.Bind("General", "Supply Point Amount Multiplier", 1f,
                new ConfigDescription("Supply Point Amount Multiplier", new AcceptableValueRange<float>(1f, 32f)));
            SupplyRateMultiplier = Config.Bind("General", "The rate at which HP and ammo is resupplied", 1f,
                new ConfigDescription("The rate at which HP and ammo is resupplied", new AcceptableValueRange<float>(1f, 16f)));
            HQAOEMultiplier = Config.Bind("General", "HQ AOE Multiplier", 1f,
                new ConfigDescription("HQ AOE Multiplier", new AcceptableValueRange<float>(1f, 32f)));
            FireRateMultiplier = Config.Bind("General", "Fire Rate Multiplier", 1f,
                new ConfigDescription("Fire Rate Multiplier",
                    new AcceptableValueRange<float>(0.1f, 32f)));
            AimIntervalMultiplier = Config.Bind("General", "Aiming Interval Multiplier", 1f,
                new ConfigDescription("Aiming Interval Multiplier", new AcceptableValueRange<float>(0.1f, 32f)));
            // beamStrenghtMultiplier = Config.Bind("Attractors", "Beam Strength Multiplier", 1f,
            //     new ConfigDescription("Beam Strength Multiplier", new AcceptableValueRange<float>(1f, 16f)));
            // beamRadiusMultiplier = Config.Bind("Attractors", "Beam Radius Multiplier", 1f,
            //     new ConfigDescription("Beam Radius Multiplier", new AcceptableValueRange<float>(1f, 16f)));
            //
            // fuelTankRefillMultiplier = Config.Bind("Propulsion", "Fuel Tank Refill Rate Multiplier", 1f,
            //     new ConfigDescription("Fuel Tank Refill Rate Multiplier", new AcceptableValueRange<float>(1f, 32f)));
            // fuelTankCapacityMultiplier = Config.Bind("Propulsion", "Fuel Tank Capacity Multiplier", 1f,
            //     new ConfigDescription("Fuel Tank Capacity Multiplier", new AcceptableValueRange<float>(1f, 32f)));
            // wheelTorqueMultiplier = Config.Bind("Propulsion", "Wheel Torque Multiplier", 1f,
            //     new ConfigDescription("Wheel Torque Multiplier", new AcceptableValueRange<float>(1f, 32f)));
            // wheelSpeedMultiplier = Config.Bind("Propulsion", "Wheel Max RPM Multiplier", 1f,
            //     new ConfigDescription("Wheel Max RPM Multiplier", new AcceptableValueRange<float>(1f, 32f)));
            // jetThrustMultiplier = Config.Bind("Propulsion", "Jet Thrust Multiplier", 1f,
            //     new ConfigDescription("Jet Thrust Multiplier", new AcceptableValueRange<float>(1f, 32f)));
            //
            // minerGroundArea = Config.Bind("Production", "Miner Ground Deposit Scan Area", 1f,
            //     new ConfigDescription("Miner Ground Deposit Scan Area", new AcceptableValueRange<float>(1f, 32f)));
            // minerMiningSpeed = Config.Bind("Production", "Miner Mining Speed", 1f,
            //     new ConfigDescription("Miner Mining Speed", new AcceptableValueRange<float>(1f, 32f)));
            //
            // allProjectilesHoming = Config.Bind("General", "Make All Projectiles Home", false);

            // shootingSpeedMultiplier.SettingChanged += (sender, args) => WeaponPropertiesManager.DoPatch();
            // energyGenMultiplier.SettingChanged += (sender, args) => GeneratorPropertiesManager.DoPatch();
            // magnetStrenghtMultiplier.SettingChanged += (sender, args) => MagnetPropertiesManager.DoPatch();
            // magnetRadiusMultiplier.SettingChanged += (sender, args) => MagnetPropertiesManager.DoPatch();
            // beamStrenghtMultiplier.SettingChanged += (sender, args) => BeamPropertiesManager.DoPatch();
            // beamRadiusMultiplier.SettingChanged += (sender, args) => BeamPropertiesManager.DoPatch();
            // fuelTankRefillMultiplier.SettingChanged += (sender, args) => FuelPropertiesManager.DoPatch();
            // fuelTankCapacityMultiplier.SettingChanged += (sender, args) => FuelPropertiesManager.DoPatch();
            // wheelTorqueMultiplier.SettingChanged += (sender, args) => WheelPropertiesManager.DoPatch();
            // wheelSpeedMultiplier.SettingChanged += (sender, args) => WheelPropertiesManager.DoPatch();
            // jetThrustMultiplier.SettingChanged += (sender, args) => ThrusterPropertiesManager.DoPatch();
            // minerGroundArea.SettingChanged += (sender, args) => MinerPropertiesManager.DoPatch();
            // minerMiningSpeed.SettingChanged += (sender, args) => MinerPropertiesManager.DoPatch();

            Logger.LogInfo("Cyka mod loaded");
            HarmonyFileLog.Enabled = true;
            Harmony harmony = new Harmony(pluginGuid);
            harmony.PatchAll();
            var originalMethods = harmony.GetPatchedMethods();
            Logger.LogInfo("Patched " + originalMethods.Count() + " methods");
        }
    }
}
