package com.newhive.scammerradar.config;

import com.newhive.scammerradar.config.subconfig.ChatSubConfig;
import com.newhive.scammerradar.config.subconfig.NameTagSubConfig;
import com.newhive.scammerradar.enums.NotificationEnum;
import net.labymod.api.addon.AddonConfig;
import net.labymod.api.client.gui.screen.widget.widgets.input.ButtonWidget.ButtonSetting;
import net.labymod.api.client.gui.screen.widget.widgets.input.SwitchWidget.SwitchSetting;
import net.labymod.api.client.gui.screen.widget.widgets.input.dropdown.DropdownWidget.DropdownEntryTranslationPrefix;
import net.labymod.api.client.gui.screen.widget.widgets.input.dropdown.DropdownWidget.DropdownSetting;
import net.labymod.api.configuration.loader.annotation.ConfigName;
import net.labymod.api.configuration.loader.annotation.SpriteSlot;
import net.labymod.api.configuration.loader.annotation.SpriteTexture;
import net.labymod.api.configuration.loader.property.ConfigProperty;
import net.labymod.api.configuration.settings.Setting;
import net.labymod.api.configuration.settings.annotation.SettingSection;
import net.labymod.api.models.OperatingSystem;
import net.labymod.api.util.MethodOrder;

@ConfigName("settings")
@SpriteTexture("sprite.png")
public class ScammerRadarConfig extends AddonConfig {
   @SwitchSetting
   @SpriteSlot(
      x = 6,
      y = 0
   )
   private final ConfigProperty<Boolean> enabled = new ConfigProperty(true);
   @SettingSection(
      value = "general",
      center = true
   )
   @SwitchSetting
   @SpriteSlot(
      x = 2,
      y = 0
   )
   private final ConfigProperty<Boolean> tabBadge = new ConfigProperty(true);
   @SpriteSlot(
      x = 5,
      y = 0
   )
   private final NameTagSubConfig nameTag = new NameTagSubConfig();
   @SpriteSlot(
      x = 3,
      y = 0
   )
   private final ChatSubConfig chat = new ChatSubConfig();
   @DropdownSetting
   @SpriteSlot(
      x = 1,
      y = 0
   )
   @DropdownEntryTranslationPrefix("scammerradar.settings.notification.type")
   private final ConfigProperty<NotificationEnum> notificationType;
   @DropdownSetting
   @SpriteSlot(
      x = 0,
      y = 0
   )
   @DropdownEntryTranslationPrefix("scammerradar.settings.notification.type")
   private final ConfigProperty<NotificationEnum> errorNotificationType;

   public ScammerRadarConfig() {
      this.notificationType = new ConfigProperty(NotificationEnum.LABYMOD);
      this.errorNotificationType = new ConfigProperty(NotificationEnum.CHAT);
   }

   @SettingSection(
      value = "discord",
      center = true
   )
   @SpriteSlot(
      x = 4,
      y = 0
   )
   @ButtonSetting
   @MethodOrder(
      after = "errorNotificationType"
   )
   public void openDiscord(Setting setting) {
      OperatingSystem.getPlatform().openUri("https://discord.scammerradar.de/");
   }

   @ButtonSetting
   @MethodOrder(
      after = "openDiscord"
   )
   @SpriteSlot(
      x = 4,
      y = 0
   )
   public void openDiscordMM(Setting setting) {
      OperatingSystem.getPlatform().openUri("https://discord.gg/pZ5fmg2D3J");
   }

   public ConfigProperty<Boolean> enabled() {
      return this.enabled;
   }

   public ConfigProperty<Boolean> tabBadge() {
      return this.tabBadge;
   }

   public ChatSubConfig getChat() {
      return this.chat;
   }

   public NameTagSubConfig getNameTag() {
      return this.nameTag;
   }

   public ConfigProperty<NotificationEnum> getNotificationType() {
      return this.notificationType;
   }

   public ConfigProperty<NotificationEnum> getErrorNotificationType() {
      return this.errorNotificationType;
   }
}
