import { createGlobalThemeContract } from "@vanilla-extract/css";
import * as color from "./color";

function varMapper(prefix: string | null = null) {
  return (value: string | null, path: string[]) => {
    if (value === null) {
      path = path.filter(item => item !== "self");
      path = path.map(item => item.replace(/^num/, ""));
      value = path.join("-");
    }
    if (prefix) value = `${prefix}-${value}`;
    return value;
  };
}

const vars = {
  isDarkTheme: "is-dark-theme",
  chroma: color.chroma,
  color: {
    ...color.other,
    ...color.message,
    ...color.named,
    primary: color.primary,
    secondary: color.secondary,
    /** Actions 日志 ANSI 颜色 */
    ansi: color.ansi,
    console: color.console,
    diff: color.diff,
  },
  github: color.github,
};

const otherVars = { border: { radius: null }, color: { ...color.otherAuto } };

const customVars = {
  branchMenuWidth: "branch-menu-width",
  cloneMenuWidth: "clone-menu-width",
  userMenuWidth: "user-menu-width",
  explore: { repolistColumns: "explore-repolist-columns", userlistColumns: "explore-userlist-columns" },
  userRepolistColumns: "user-repolist-columns",
  org: { repolistColumns: "org-repolist-columns", userlistColumns: "org-userlist-columns" },
};

const themeInfo = {
  version: null,
};

export const themeVars = createGlobalThemeContract(vars, varMapper());
export const otherThemeVars = createGlobalThemeContract(otherVars, varMapper());
export const customThemeVars = createGlobalThemeContract(customVars, varMapper("custom"));
export const themeInfoVars = createGlobalThemeContract(themeInfo, varMapper("theme"));

export { css } from "@linaria/core";
