export const layoutConfig = {
  // Muuri 网格系统尺寸。
  grid: {
    // 1x1 单元格宽高（像素）。
    cellSize: 106,
    // 单元格间距（像素）。
    gap: 16,
  },
  // 左侧栏布局。
  sidebar: {
    // 侧栏宽度（像素）。
    width: 68,
    // 侧栏上下内边距（像素）。
    paddingY: 20,
    // 头像占位尺寸（像素）。
    profileSize: 40,
    // 头像下方间距（像素）。
    profileMarginBottom: 30,
    // 导航项正方形尺寸（像素）。
    navItemSize: 44,
    // 导航项间距（像素）。
    navGap: 16,
    // 激活指示条水平偏移（可为负）。
    activeIndicatorOffset: -8,
    // 激活指示条宽度（像素）。
    activeIndicatorWidth: 4,
    // 激活指示条高度（像素）。
    activeIndicatorHeight: 20,
    // “新增”按钮额外上边距（像素）。
    addItemMarginTop: 10,
  },
  // 主内容区边界。
  content: {
    // 最大宽度（像素）。
    maxWidth: 1400,
    // 内容区内边距（像素）。
    padding: 40,
  },
  // 搜索栏尺寸。
  searchBar: {
    // 最大宽度（像素）。
    maxWidth: 560,
    // 高度（像素）。
    height: 52,
    // 水平内边距（像素）。
    paddingX: 16,
    // 搜索栏下方间距（像素）。
    marginBottom: 40,
  },
  // 图标卡片尺寸与字体。
  icon: {
    // 图标方块尺寸（像素）。
    size: 72,
    // 图标首字母字体大小（像素）。
    fontSize: 28,
    // 卡片内边距（像素）。
    padding: 8,
    // 标签字体大小（像素）。
    labelFontSize: 13,
    // 图标与标签间距（像素）。
    labelMarginTop: 8,
  },
  // 组件卡片尺寸与字体。
  widget: {
    // 内容区内边距（像素）。
    contentPadding: 16,
    // 标签字体大小（像素）。
    labelFontSize: 13,
    // 标签上下内边距（像素）。
    labelPaddingY: 8,
  },
  // 时钟尺寸。
  clock: {
    // 时间字体大小（像素）。
    timeFontSize: 82,
    // 日期字体大小（像素）。
    dateFontSize: 16,
    // 时钟下方间距（像素）。
    marginBottom: 30,
    // 字母间距（像素）。
    letterSpacing: 2,
    // 日期上方间距（像素）。
    dateMarginTop: 8,
  },
  // 右键菜单尺寸。
  contextMenu: {
    // 菜单宽度（像素）。
    width: 180,
    // 菜单内边距（像素）。
    padding: 8,
    // 菜单项上下内边距（像素）。
    itemPaddingY: 10,
    // 菜单项左右内边距（像素）。
    itemPaddingX: 16,
    // 图标尺寸（像素）。
    iconSize: 16,
    // 图标与文字间距（像素）。
    iconMarginRight: 12,
    // 布局区块上下内边距（像素）。
    layoutSectionPaddingY: 6,
    // 布局区块左右内边距（像素）。
    layoutSectionPaddingX: 12,
    // 布局标题下方间距（像素）。
    layoutTitleMarginBottom: 8,
    // 布局选项间距（像素）。
    layoutOptionsGap: 6,
    // 布局选项胶囊宽度（像素）。
    layoutOptionWidth: 40,
    // 布局选项上下内边距（像素）。
    layoutOptionPaddingY: 4,
  },
} as const;

// 设置根元素上的像素级样式变量。
const setPx = (root: HTMLElement, name: string, value: number) => {
  root.style.setProperty(name, `${value}px`);
};

// 将布局配置写入全局样式变量，供样式使用。
export const applyLayoutConfig = (root: HTMLElement = document.documentElement) => {
  setPx(root, '--grid-cell-size', layoutConfig.grid.cellSize);
  setPx(root, '--grid-gap', layoutConfig.grid.gap);

  setPx(root, '--sidebar-width', layoutConfig.sidebar.width);
  setPx(root, '--sidebar-padding-y', layoutConfig.sidebar.paddingY);
  setPx(root, '--sidebar-profile-size', layoutConfig.sidebar.profileSize);
  setPx(root, '--sidebar-profile-margin-bottom', layoutConfig.sidebar.profileMarginBottom);
  setPx(root, '--sidebar-nav-item-size', layoutConfig.sidebar.navItemSize);
  setPx(root, '--sidebar-nav-gap', layoutConfig.sidebar.navGap);
  setPx(root, '--sidebar-active-indicator-offset', layoutConfig.sidebar.activeIndicatorOffset);
  setPx(root, '--sidebar-active-indicator-width', layoutConfig.sidebar.activeIndicatorWidth);
  setPx(root, '--sidebar-active-indicator-height', layoutConfig.sidebar.activeIndicatorHeight);
  setPx(root, '--sidebar-add-margin-top', layoutConfig.sidebar.addItemMarginTop);

  setPx(root, '--content-max-width', layoutConfig.content.maxWidth);
  setPx(root, '--content-padding', layoutConfig.content.padding);

  setPx(root, '--search-max-width', layoutConfig.searchBar.maxWidth);
  setPx(root, '--search-height', layoutConfig.searchBar.height);
  setPx(root, '--search-padding-x', layoutConfig.searchBar.paddingX);
  setPx(root, '--search-margin-bottom', layoutConfig.searchBar.marginBottom);

  setPx(root, '--icon-size', layoutConfig.icon.size);
  setPx(root, '--icon-font-size', layoutConfig.icon.fontSize);
  setPx(root, '--icon-card-padding', layoutConfig.icon.padding);
  setPx(root, '--icon-label-font-size', layoutConfig.icon.labelFontSize);
  setPx(root, '--icon-label-margin-top', layoutConfig.icon.labelMarginTop);

  setPx(root, '--widget-content-padding', layoutConfig.widget.contentPadding);
  setPx(root, '--widget-label-font-size', layoutConfig.widget.labelFontSize);
  setPx(root, '--widget-label-padding-y', layoutConfig.widget.labelPaddingY);

  setPx(root, '--clock-time-font-size', layoutConfig.clock.timeFontSize);
  setPx(root, '--clock-date-font-size', layoutConfig.clock.dateFontSize);
  setPx(root, '--clock-margin-bottom', layoutConfig.clock.marginBottom);
  setPx(root, '--clock-letter-spacing', layoutConfig.clock.letterSpacing);
  setPx(root, '--clock-date-margin-top', layoutConfig.clock.dateMarginTop);

  setPx(root, '--context-menu-width', layoutConfig.contextMenu.width);
  setPx(root, '--context-menu-padding', layoutConfig.contextMenu.padding);
  setPx(root, '--context-menu-item-padding-y', layoutConfig.contextMenu.itemPaddingY);
  setPx(root, '--context-menu-item-padding-x', layoutConfig.contextMenu.itemPaddingX);
  setPx(root, '--context-menu-icon-size', layoutConfig.contextMenu.iconSize);
  setPx(root, '--context-menu-icon-margin-right', layoutConfig.contextMenu.iconMarginRight);
  setPx(root, '--context-menu-layout-section-padding-y', layoutConfig.contextMenu.layoutSectionPaddingY);
  setPx(root, '--context-menu-layout-section-padding-x', layoutConfig.contextMenu.layoutSectionPaddingX);
  setPx(root, '--context-menu-layout-title-margin-bottom', layoutConfig.contextMenu.layoutTitleMarginBottom);
  setPx(root, '--context-menu-layout-options-gap', layoutConfig.contextMenu.layoutOptionsGap);
  setPx(root, '--context-menu-layout-option-width', layoutConfig.contextMenu.layoutOptionWidth);
  setPx(root, '--context-menu-layout-option-padding-y', layoutConfig.contextMenu.layoutOptionPaddingY);
};
