import { Modal } from "antd"
import loadable from "@loadable/component"
import UploadButton from "@components/UploadButton"

import "./index.less"

export default {
    id: "apparence",
    icon: "FiEye",
    label: "Apparence",
    group: "app",
    order: 1,
    settings: [
        {
            id: "style:variant_mode",
            group: "aspect",
            icon: "FiMoon",
            title: "Theme",
            description: "Change the theme of the application.",
            component: loadable(() => import("../components/themeVariantSelector")),
            layout: "horizontal",
        },
        {
            id: "style.compactMode",
            group: "aspect",
            component: "Switch",
            icon: "MdOutlineViewCompact",
            title: "Compact mode",
            description: "Reduce the size of the application elements.",
            defaultValue: () => {
                return app.cores.style.getVar("compact-mode")
            },
            onUpdate: (value) => {
                app.cores.style.mutateTheme({
                    "compact-mode": value
                })

                return value
            },
            storaged: true
        },
        {
            id: "style.uiFontScale",
            group: "aspect",
            component: "Slider",
            icon: "MdFormatSize",
            title: "Font scale",
            description: "Change the font scale of the application.",
            props: {
                min: 1,
                max: 1.2,
                step: 0.01,
                tooltip: {
                    formatter: (value) => `x${value}`
                }
            },
            defaultValue: () => {
                return app.cores.style.getVar("fontScale")
            },
            onUpdate: (value) => {
                app.cores.style.mutateTheme({
                    "fontScale": value
                })

                return value
            },
            storaged: true
        },
        {
            id: "style.uiFont",
            group: "aspect",
            component: "Select",
            icon: "MdOutlineFontDownload",
            title: "Font family",
            description: "Change the font of the application.",
            props: {
                style: {
                    width: "100%"
                },
                options: [
                    {
                        label: "Noto Sans",
                        value: "'Noto Sans', sans-serif"
                    },
                    {
                        label: "Inter (Default)",
                        value: "'Inter', sans-serif"
                    },
                    {
                        label: "Varela Round",
                        value: "'Varela Round', sans-serif"
                    },
                    {
                        label: "Manrope",
                        value: "'Manrope', sans-serif"
                    }
                ]
            },
            defaultValue: () => {
                return app.cores.style.getVar("fontFamily")
            },
            onUpdate: (value) => {
                app.cores.style.mutateTheme({
                    "fontFamily": value
                })

                return value
            },
            storaged: true
        },
        {
            id: "style.colorPrimary",
            group: "aspect",
            component: "SliderColorPicker",
            title: "Primary color",
            description: "Change primary color of the application.",
            icon: "IoMdColorFill",
            defaultValue: () => {
                return app.cores.style.getVar("colorPrimary")
            },
            onUpdate: (value) => {
                app.cores.style.mutateTheme({
                    "colorPrimary": value
                })
            },
            storaged: false,
        },

        {
            id: "style.backgroundImage",
            group: "aspect",
            icon: "MdOutlineImage",
            title: "Background image",
            description: "Change background image of the application. You can use a local image or a remote image (URL).",
            component: loadable(() => import("../components/urlInput")),
            props: {
                noPreview: true,
            },
            extraActions: [
                {
                    id: "delete",
                    icon: "FiDelete",
                    title: "Remove",
                    onClick: (ctx) => {
                        return ctx.dispatchUpdate("")
                    }
                },
                UploadButton
            ],
            defaultValue: () => {
                const value = app.cores.style.getVar("backgroundImage")

                return value ? value.replace(/url\(|\)/g, "") : ""
            },
            onUpdate: (value) => {
                app.cores.style.mutateTheme({
                    backgroundImage: `url(${value})`
                })
            },
            storaged: false,
        },
        {
            id: "style.backgroundTweaker",
            group: "aspect",
            title: "Background tweaker",
            description: "Tweak the custom background",
            component: loadable(() => import("../components/backgroundTweaker")),
            storaged: false
        },
        {
            id: "resetTheme",
            group: "aspect",
            component: "Button",
            icon: "IoMdRefresh",
            title: "Reset to default theme",
            props: {
                children: "Reset"
            },
            onUpdate: (value) => {
                Modal.confirm({
                    title: "Are you sure you want to reset the theme to the default theme ?",
                    description: "This action will reset the theme to the default theme. All your modifications will be lost.",
                    onOk: () => {
                        app.cores.style.resetToDefault()
                    }
                })
            },
            storaged: false
        }
    ]
}