import { defineComponent, computed, unref } from 'vue';

import { BasicDrawer } from '/@/components/Drawer/index';

import { Divider } from 'ant-design-vue';

import { TypePicker, ThemeColorPicker, SettingFooter, SwitchItem, SelectItem, InputNumberItem } from './components';



import { AppDarkModeToggle } from '/@/components/Application';



import { MenuTypeEnum, TriggerEnum } from '/@/enums/menuEnum';



import { useRootSetting } from '/@/hooks/setting/useRootSetting';

import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';

import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';

import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting';

import { useTransitionSetting } from '/@/hooks/setting/useTransitionSetting';

import { useI18n } from '/@/hooks/web/useI18n';



import { layoutHandler } from './handler';



import {

  HandlerEnum,

  contentModeOptions,

  topMenuAlignOptions,

  getMenuTriggerOptions,

  routerTransitionOptions,

  menuTypeList,

  mixSidebarTriggerOptions,

  tabsThemeOptions,

} from './enum';



import { HEADER_PRESET_BG_COLOR_LIST, SIDE_BAR_BG_COLOR_LIST, APP_PRESET_COLOR_LIST } from '/@/settings/designSetting';



const { t } = useI18n();



export default defineComponent({

  name: 'SettingDrawer',

  setup(_, { attrs }) {

    const {

      getContentMode,

      getShowFooter,

      getShowBreadCrumb,

      getShowBreadCrumbIcon,

      getShowLogo,

      getFullContent,

      getColorWeak,

      getGrayMode,

      getLockTime,

      getShowDarkModeToggle,

      getThemeColor,

      getAiIconShow,

    } = useRootSetting();



    const { getOpenPageLoading, getBasicTransition, getEnableTransition, getOpenNProgress } = useTransitionSetting();



    const {

      getIsHorizontal,

      getShowMenu,

      getMenuType,

      getTrigger,

      getCollapsedShowTitle,

      getMenuFixed,

      getCollapsed,

      getCanDrag,

      getTopMenuAlign,

      getAccordion,

      getMenuWidth,

      getMenuBgColor,

      getIsTopMenu,

      getSplit,

      getIsMixSidebar,

      getCloseMixSidebarOnChange,

      getMixSideTrigger,

      getMixSideFixed,

    } = useMenuSetting();



    const { getShowHeader, getFixed: getHeaderFixed, getHeaderBgColor, getShowSearch } = useHeaderSetting();



    const { getShowMultipleTab, getShowQuick, getShowRedo, getShowFold, getTabsTheme } = useMultipleTabSetting();



    const getShowMenuRef = computed(() => {

      return unref(getShowMenu) && !unref(getIsHorizontal);

    });



    const isDev= import.meta.env.DEV



    function renderSidebar() {

      return (

        <>

          <TypePicker

            menuTypeList={menuTypeList}

            handler={(item: typeof menuTypeList[0]) => {

              layoutHandler(HandlerEnum.CHANGE_LAYOUT, {

                mode: item.mode,

                type: item.type,

                split: unref(getIsHorizontal) ? false : undefined,

              });

            }}

            def={unref(getMenuType)}

          />

        </>

      );

    }



    function renderHeaderTheme() {

      return <ThemeColorPicker colorList={HEADER_PRESET_BG_COLOR_LIST} def={unref(getHeaderBgColor)} event={HandlerEnum.HEADER_THEME} />;

    }



    function renderSiderTheme() {

      return <ThemeColorPicker colorList={SIDE_BAR_BG_COLOR_LIST} def={unref(getMenuBgColor)} event={HandlerEnum.MENU_THEME} />;

    }



    function renderMainTheme() {

      return <ThemeColorPicker colorList={APP_PRESET_COLOR_LIST} def={unref(getThemeColor)} event={HandlerEnum.CHANGE_THEME_COLOR} />;

    }



    /**

     * @description:

     */

    function renderFeatures() {

      let triggerDef = unref(getTrigger);



      const triggerOptions = getMenuTriggerOptions(unref(getSplit));

      const some = triggerOptions.some((item) => item.value === triggerDef);

      if (!some) {

        triggerDef = TriggerEnum.FOOTER;

      }



      return (

        <>

          <SwitchItem

            title={t('layout.setting.splitMenu')}

            event={HandlerEnum.MENU_SPLIT}

            def={unref(getSplit)}

            disabled={!unref(getShowMenuRef) || unref(getMenuType) !== MenuTypeEnum.MIX}

          />

          {/*<SwitchItem*/}

          {/*  title={t('layout.setting.mixSidebarFixed')}*/}

          {/*  event={HandlerEnum.MENU_FIXED_MIX_SIDEBAR}*/}

          {/*  def={unref(getMixSideFixed)}*/}

          {/*  disabled={!unref(getIsMixSidebar)}*/}

          {/*/>*/}



          {/*<SwitchItem*/}

          {/*  title={t('layout.setting.closeMixSidebarOnChange')}*/}

          {/*  event={HandlerEnum.MENU_CLOSE_MIX_SIDEBAR_ON_CHANGE}*/}

          {/*  def={unref(getCloseMixSidebarOnChange)}*/}

          {/*  disabled={!unref(getIsMixSidebar)}*/}

          {/*/>*/}

          {/*<SwitchItem*/}

          {/*  title={t('layout.setting.menuCollapse')}*/}

          {/*  event={HandlerEnum.MENU_COLLAPSED}*/}

          {/*  def={unref(getCollapsed)}*/}

          {/*  disabled={!unref(getShowMenuRef)}*/}

          {/*/>*/}



          {/*<SwitchItem*/}

          {/*  title={t('layout.setting.menuSearch')}*/}

          {/*  event={HandlerEnum.HEADER_SEARCH}*/}

          {/*  def={unref(getShowSearch)}*/}

          {/*  disabled={!unref(getShowHeader)}*/}

          {/*/>*/}

          {/*<SwitchItem*/}

          {/*  title={t('layout.setting.menuAccordion')}*/}

          {/*  event={HandlerEnum.MENU_ACCORDION}*/}

          {/*  def={unref(getAccordion)}*/}

          {/*  disabled={!unref(getShowMenuRef)}*/}

          {/*/>*/}



          {/*<SwitchItem*/}

          {/*  title={t('layout.setting.fixedHeader')}*/}

          {/*  event={HandlerEnum.HEADER_FIXED}*/}

          {/*  def={unref(getHeaderFixed)}*/}

          {/*  disabled={!unref(getShowHeader)}*/}

          {/*/>*/}

          {/*<SwitchItem*/}

          {/*  title={t('layout.setting.fixedSideBar')}*/}

          {/*  event={HandlerEnum.MENU_FIXED}*/}

          {/*  def={unref(getMenuFixed)}*/}

          {/*  disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)}*/}

          {/*/>*/}

          {/*<SelectItem*/}

          {/*  title={t('layout.setting.mixSidebarTrigger')}*/}

          {/*  event={HandlerEnum.MENU_TRIGGER_MIX_SIDEBAR}*/}

          {/*  def={unref(getMixSideTrigger)}*/}

          {/*  options={mixSidebarTriggerOptions}*/}

          {/*  disabled={!unref(getIsMixSidebar)}*/}

          {/*/>*/}

          <SelectItem title={t('layout.setting.tabsTheme')} event={HandlerEnum.TABS_THEME} def={unref(getTabsTheme)} options={tabsThemeOptions} />

          <SelectItem

            title={t('layout.setting.topMenuLayout')}

            event={HandlerEnum.MENU_TOP_ALIGN}

            def={unref(getTopMenuAlign)}

            options={topMenuAlignOptions}

            disabled={!unref(getShowHeader) || unref(getSplit) || (!unref(getIsTopMenu) && !unref(getSplit)) || unref(getIsMixSidebar)}

          />

          <SelectItem

            title={t('layout.setting.menuCollapseButton')}

            event={HandlerEnum.MENU_TRIGGER}

            def={triggerDef}

            options={triggerOptions}

            disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)}

          />

          {

            isDev && <SelectItem

              title={t('layout.setting.contentMode')}

              event={HandlerEnum.CONTENT_MODE}

              def={unref(getContentMode)}

              options={contentModeOptions}

            />

          }

          {

            isDev && <InputNumberItem

              title={t('layout.setting.autoScreenLock')}

              min={0}

              event={HandlerEnum.LOCK_TIME}

              defaultValue={unref(getLockTime)}

              formatter={(value: string) => {

                return parseInt(value) === 0 ? `0(${t('layout.setting.notAutoScreenLock')})` : `${value}${t('layout.setting.minute')}`;

              }}

            />

          }

          {

            isDev && <InputNumberItem

              title={t('layout.setting.expandedMenuWidth')}

              max={600}

              min={100}

              step={10}

              event={HandlerEnum.MENU_WIDTH}

              disabled={!unref(getShowMenuRef)}

              defaultValue={unref(getMenuWidth)}

              formatter={(value: string) => `${parseInt(value)}px`}

            />

          }

        </>

      );

    }



    function renderContent() {

      return (

        <>

          {

            isDev && <SwitchItem

              title={t('layout.setting.menuDrag')}

              event={HandlerEnum.MENU_HAS_DRAG}

              def={unref(getCanDrag)}

              disabled={!unref(getShowMenuRef)}

            />

          }

          {

            isDev &&  <SwitchItem

              title={t('layout.setting.collapseMenuDisplayName')}

              event={HandlerEnum.MENU_COLLAPSED_SHOW_TITLE}

              def={unref(getCollapsedShowTitle)}

              disabled={!unref(getShowMenuRef) || !unref(getCollapsed) || unref(getIsMixSidebar)}

            />

          }

          <SwitchItem title={t('layout.setting.tabs')} event={HandlerEnum.TABS_SHOW} def={unref(getShowMultipleTab)} />

          <SwitchItem

            title={t('layout.setting.breadcrumb')}

            event={HandlerEnum.SHOW_BREADCRUMB}

            def={unref(getShowBreadCrumb)}

            disabled={!unref(getShowHeader)}

          />



          {/*<SwitchItem*/}

          {/*  title={t('layout.setting.breadcrumbIcon')}*/}

          {/*  event={HandlerEnum.SHOW_BREADCRUMB_ICON}*/}

          {/*  def={unref(getShowBreadCrumbIcon)}*/}

          {/*  disabled={!unref(getShowHeader)}*/}

          {/*/>*/}



          {/*<SwitchItem*/}

          {/*  title={t('layout.setting.tabsRedoBtn')}*/}

          {/*  event={HandlerEnum.TABS_SHOW_REDO}*/}

          {/*  def={unref(getShowRedo)}*/}

          {/*  disabled={!unref(getShowMultipleTab)}*/}

          {/*/>*/}



          {/*<SwitchItem*/}

          {/*  title={t('layout.setting.tabsQuickBtn')}*/}

          {/*  event={HandlerEnum.TABS_SHOW_QUICK}*/}

          {/*  def={unref(getShowQuick)}*/}

          {/*  disabled={!unref(getShowMultipleTab)}*/}

          {/*/>*/}

          {/*<SwitchItem*/}

          {/*  title={t('layout.setting.tabsFoldBtn')}*/}

          {/*  event={HandlerEnum.TABS_SHOW_FOLD}*/}

          {/*  def={unref(getShowFold)}*/}

          {/*  disabled={!unref(getShowMultipleTab)}*/}

          {/*/>*/}



          {/*<SwitchItem*/}

          {/*  title={t('layout.setting.sidebar')}*/}

          {/*  event={HandlerEnum.MENU_SHOW_SIDEBAR}*/}

          {/*  def={unref(getShowMenu)}*/}

          {/*  disabled={unref(getIsHorizontal)}*/}

          {/*/>*/}



          {/*<SwitchItem*/}

          {/*  title={t('layout.setting.header')}*/}

          {/*  event={HandlerEnum.HEADER_SHOW}*/}

          {/*  def={unref(getShowHeader)}*/}

          {/*/>*/}

          {/*<SwitchItem*/}

          {/*  title="Logo"*/}

          {/*  event={HandlerEnum.SHOW_LOGO}*/}

          {/*  def={unref(getShowLogo)}*/}

          {/*  disabled={unref(getIsMixSidebar)}*/}

          {/*/>*/}

          <SwitchItem title={t('layout.setting.footer')} event={HandlerEnum.SHOW_FOOTER} def={unref(getShowFooter)} />

          {/*<SwitchItem*/}

          {/*  title={t('layout.setting.fullContent')}*/}

          {/*  event={HandlerEnum.FULL_CONTENT}*/}

          {/*  def={unref(getFullContent)}*/}

          {/*/>*/}



          <SwitchItem title={t('layout.setting.grayMode')} event={HandlerEnum.GRAY_MODE} def={unref(getGrayMode)} />



          <SwitchItem title={t('layout.setting.colorWeak')} event={HandlerEnum.COLOR_WEAK} def={unref(getColorWeak)} />



           <SwitchItem title={t('layout.setting.aiIconSHow')} event={HandlerEnum.AI_ICON_SHOW} def={unref(getAiIconShow)} />

        </>

      );

    }



    function renderTransition() {

      return (

        <>

          <SwitchItem title={t('layout.setting.progress')} event={HandlerEnum.OPEN_PROGRESS} def={unref(getOpenNProgress)} />

          <SwitchItem title={t('layout.setting.switchLoading')} event={HandlerEnum.OPEN_PAGE_LOADING} def={unref(getOpenPageLoading)} />



          <SwitchItem title={t('layout.setting.switchAnimation')} event={HandlerEnum.OPEN_ROUTE_TRANSITION} def={unref(getEnableTransition)} />



          <SelectItem

            title={t('layout.setting.animationType')}

            event={HandlerEnum.ROUTER_TRANSITION}

            def={unref(getBasicTransition)}

            options={routerTransitionOptions}

            disabled={!unref(getEnableTransition)}

          />

        </>

      );

    }



    return () => (

      <BasicDrawer {...attrs} title={t('layout.setting.drawerTitle')} width={330} class="setting-drawer">

        {unref(getShowDarkModeToggle) && <Divider>{() => t('layout.setting.darkMode')}</Divider>}

        {unref(getShowDarkModeToggle) && <AppDarkModeToggle class="mx-auto" />}

        <Divider>{() => t('layout.setting.navMode')}</Divider>

        {renderSidebar()}

        <Divider>{() => t('layout.setting.sysTheme')}</Divider>

        {renderMainTheme()}

        <Divider>{() => t('layout.setting.headerTheme')}</Divider>

        {renderHeaderTheme()}

        <Divider>{() => t('layout.setting.sidebarTheme')}</Divider>

        {renderSiderTheme()}

        <Divider>{() => t('layout.setting.interfaceFunction')}</Divider>

        {renderFeatures()}

        {/*<Divider>{() => t('layout.setting.interfaceDisplay')}</Divider>*/}

        {renderContent()}

        {/*<Divider>{() => t('layout.setting.animation')}</Divider>*/}

        {/*{renderTransition()}*/}

        <Divider />

        <SettingFooter />

      </BasicDrawer>

    );

  },

});