import SoopyMouseClickEvent from "../../../guimanager/EventListener/SoopyMouseClickEvent";
import ButtonWithArrow from "../../../guimanager/GuiElement/ButtonWithArrow";
import SoopyGuiElement from "../../../guimanager/GuiElement/SoopyGuiElement";
import SoopyTextElement from "../../../guimanager/GuiElement/SoopyTextElement";
import Notification from "../../../guimanager/Notification";
import FeatureManager from "../../featureClass/featureManager";
import FirstLoadPage from "./firstLoadPage";

class WelcomePage extends FirstLoadPage{
    constructor(){
        super()

        this.addChild(new SoopyTextElement().setText("§0Welcome to SoopyAddons V2!").setLocation(0.1, 0.05,0.8,0.1).setMaxTextScale(10));

        this.addChild(new SoopyTextElement().setText("§7First lets get privacy settings out of the way.").setLocation(0.1, 0.15,0.8,0.075).setMaxTextScale(10));

        this.settingsArea = new SoopyGuiElement().setLocation(0.1, 0.25,0.8,0.75);
        this.settingsArea.setScrollable(true)

        this.addChild(this.settingsArea);
    }

    load(){
        let y = 0

        this.guiPage.mainThing.privacySettings.forEach(setting => {
            setting = setting.getGuiObject()

            setting.location.location.y.set(y, 0)

            this.settingsArea.addChild(setting);

            y += 0.045+setting.location.size.y.get()
        })
    }
}
class ApiKeyPage extends FirstLoadPage{
    constructor(){
        super()

        this.addChild(new SoopyTextElement().setText("§0Next lets setup your api key!").setLocation(0.1, 0.05,0.8,0.1).setMaxTextScale(10));

        this.addChild(new SoopyTextElement().setText("§7You can skip this but some features may not work").setLocation(0.1, 0.15,0.8,0.075).setMaxTextScale(10));

        this.settingsArea = new SoopyGuiElement().setLocation(0.1, 0.25,0.8,0.75);
        this.settingsArea.setScrollable(true)

        this.addChild(this.settingsArea);
    }

    load(){
        let y = 0

        let settings = [this.guiPage.mainThing.apiKeySetting, this.guiPage.mainThing.verifyApiKey, this.guiPage.mainThing.findApiKey, this.guiPage.mainThing.newApiKey]
        settings.forEach(setting => {
            setting = setting.getGuiObject()

            setting.location.location.y.set(y, 0)

            this.settingsArea.addChild(setting);

            y += 0.045+setting.location.size.y.get()
        })
    }
}

class HowToOpenMenuPage extends FirstLoadPage{
    constructor(){
        super()

        this.addChild(new SoopyTextElement().setText("§0Your all set!").setLocation(0.1, 0.1,0.8,0.3).setMaxTextScale(10));

        this.addChild(new SoopyTextElement().setText("§7To change any settings, or to access this menu again run §2/soopy§7.").setLocation(0.1, 0.3,0.8,0.1).setMaxTextScale(10));

        let openSettingsButton = new ButtonWithArrow().setText("§0Open settings").setLocation(0.1, 0.5,0.3,0.2).setDirectionRight(false)

        openSettingsButton.addEvent(new SoopyMouseClickEvent().setHandler(()=>{
            ChatLib.command("soopyv2", true)
        }))

        this.addChild(openSettingsButton);

        let closeButton = new ButtonWithArrow().setText("§0Close").setLocation(0.6, 0.5,0.3,0.2)

        closeButton.addEvent(new SoopyMouseClickEvent().setHandler(()=>{
            Client.currentGui.close()
        }))

        this.addChild(closeButton);

    }
}

class DisableFeatures extends FirstLoadPage{
    constructor(){
        super()

        this.addChild(new SoopyTextElement().setText("§0Lastly do you want to disable all features?").setLocation(0.1, 0.1,0.8,0.3).setMaxTextScale(10));

        this.addChild(new SoopyTextElement().setText("§7(So you can only enable the ones you want)").setLocation(0.1, 0.3,0.8,0.1).setMaxTextScale(10));

        let openSettingsButton = new ButtonWithArrow().setText("§0Disable all features").setLocation(0.35, 0.5,0.3,0.2)

        openSettingsButton.addEvent(new SoopyMouseClickEvent().setHandler(()=>{
            
            new Thread(()=>{
                new Notification("Disabling features...", [])
                Object.keys(FeatureManager.featureMetas).forEach((f)=>{
                    let meta = FeatureManager.featureMetas[f]

                    let isHidden = meta.isHidden
                    if(typeof isHidden === "string"){
                        return
                    }
                    if(isHidden) return
                    if(!meta.isTogglable) return

                    FeatureManager.featureSettingsData[f].enabled = false
                    FeatureManager.featureSettingsDataLastUpdated = true

                    if(FeatureManager.isFeatureLoaded(f)){
                        FeatureManager.unloadFeature(f)
                    }
                })
                new Notification("Disabled all features!", [])
            }).start()
        }))

        this.addChild(openSettingsButton);

    }
}

export default [new WelcomePage(), new ApiKeyPage(), new DisableFeatures(), new HowToOpenMenuPage()]