const path = require("path");
const colors = require("tailwindcss/colors");
const defaultTheme = require("tailwindcss/defaultTheme");
const generatePalette = require(path.resolve(
  __dirname,
  "src/@fuse/tailwind/utils/generate-palette"
));

/**
 * Custom palettes
 *
 * Uses the generatePalette helper method to generate
 * Tailwind-like color palettes automatically
 */
const customPalettes = {
  brand: generatePalette("#2196F3"),
};

/**
 * Themes
 */
const themes = {
  // Default theme is required for theming system to work correctly
  default: {
    primary: {
      ...colors.indigo,
      DEFAULT: colors.indigo[600],
    },
    accent: {
      ...colors.slate,
      DEFAULT: colors.slate[800],
    },
    warn: {
      ...colors.red,
      DEFAULT: colors.red[600],
    },
    "on-warn": {
      500: colors.red["50"],
    },
  },
  // Rest of the themes will use the 'default' as the base theme
  // and extend them with their given configuration
  brand: {
    primary: customPalettes.brand,
  },
  teal: {
    primary: {
      ...colors.teal,
      DEFAULT: colors.teal[600],
    },
  },
  rose: {
    primary: colors.rose,
  },
  purple: {
    primary: {
      ...colors.purple,
      DEFAULT: colors.purple[600],
    },
  },
  amber: {
    primary: colors.amber,
  },
};

/**
 * Tailwind configuration
 */
const config = {
  darkMode: "class",
  content: ["./src/**/*.{html,scss,ts}"],
  important: true,
  theme: {
    fontSize: {
      xs: "0.625rem",
      sm: "0.75rem",
      md: "0.8125rem",
      base: "0.875rem",
      lg: "1rem",
      xl: "1.125rem",
      "2xl": "1.25rem",
      "3xl": "1.5rem",
      "4xl": "2rem",
      "5xl": "2.25rem",
      "6xl": "2.5rem",
      "7xl": "3rem",
      "8xl": "4rem",
      "9xl": "6rem",
      "10xl": "8rem",
    },
    screens: {
      sm: "600px",
      md: "960px",
      lg: "1280px",
      xl: "1440px",
    },
    extend: {
      animation: {
        "spin-slow": "spin 3s linear infinite",
      },
      colors: {
        gray: colors.slate,
      },
      flex: {
        0: "0 0 auto",
      },
      fontFamily: {
        sans: `"Inter var", ${defaultTheme.fontFamily.sans.join(",")}`,
        mono: `"IBM Plex Mono", ${defaultTheme.fontFamily.mono.join(",")}`,
      },
      opacity: {
        12: "0.12",
        38: "0.38",
        87: "0.87",
      },
      rotate: {
        "-270": "270deg",
        15: "15deg",
        30: "30deg",
        60: "60deg",
        270: "270deg",
      },
      scale: {
        "-1": "-1",
      },
      zIndex: {
        "-1": -1,
        49: 49,
        60: 60,
        70: 70,
        80: 80,
        90: 90,
        99: 99,
        999: 999,
        9999: 9999,
        99999: 99999,
      },
      spacing: {
        13: "3.25rem",
        15: "3.75rem",
        18: "4.5rem",
        22: "5.5rem",
        26: "6.5rem",
        30: "7.5rem",
        50: "12.5rem",
        90: "22.5rem",

        // Bigger values
        100: "25rem",
        120: "30rem",
        128: "32rem",
        140: "35rem",
        160: "40rem",
        180: "45rem",
        192: "48rem",
        200: "50rem",
        240: "60rem",
        256: "64rem",
        280: "70rem",
        320: "80rem",
        360: "90rem",
        400: "100rem",
        480: "120rem",

        // Fractional values
        "1/2": "50%",
        "1/3": "33.333333%",
        "2/3": "66.666667%",
        "1/4": "25%",
        "2/4": "50%",
        "3/4": "75%",
      },
      minHeight: ({ theme }) => ({
        ...theme("spacing"),
      }),
      maxHeight: {
        none: "none",
      },
      minWidth: ({ theme }) => ({
        ...theme("spacing"),
        screen: "100vw",
      }),
      maxWidth: ({ theme }) => ({
        ...theme("spacing"),
        screen: "100vw",
      }),
      transitionDuration: {
        400: "400ms",
      },
      transitionTimingFunction: {
        drawer: "cubic-bezier(0.25, 0.8, 0.25, 1)",
      },

      // @tailwindcss/typography
      typography: ({ theme }) => ({
        DEFAULT: {
          css: {
            color: "var(--fuse-text-default)",
            '[class~="lead"]': {
              color: "var(--fuse-text-secondary)",
            },
            a: {
              color: "var(--fuse-primary-500)",
            },
            strong: {
              color: "var(--fuse-text-default)",
            },
            "ol > li::before": {
              color: "var(--fuse-text-secondary)",
            },
            "ul > li::before": {
              backgroundColor: "var(--fuse-text-hint)",
            },
            hr: {
              borderColor: "var(--fuse-border)",
            },
            blockquote: {
              color: "var(--fuse-text-default)",
              borderLeftColor: "var(--fuse-border)",
            },
            h1: {
              color: "var(--fuse-text-default)",
            },
            h2: {
              color: "var(--fuse-text-default)",
            },
            h3: {
              color: "var(--fuse-text-default)",
            },
            h4: {
              color: "var(--fuse-text-default)",
            },
            "figure figcaption": {
              color: "var(--fuse-text-secondary)",
            },
            code: {
              color: "var(--fuse-text-default)",
              fontWeight: "500",
            },
            "a code": {
              color: "var(--fuse-primary)",
            },
            pre: {
              color: theme("colors.white"),
              backgroundColor: theme("colors.gray.800"),
            },
            thead: {
              color: "var(--fuse-text-default)",
              borderBottomColor: "var(--fuse-border)",
            },
            "tbody tr": {
              borderBottomColor: "var(--fuse-border)",
            },
            'ol[type="A" s]': false,
            'ol[type="a" s]': false,
            'ol[type="I" s]': false,
            'ol[type="i" s]': false,
          },
        },
        sm: {
          css: {
            code: {
              fontSize: "1em",
            },
            pre: {
              fontSize: "1em",
            },
            table: {
              fontSize: "1em",
            },
          },
        },
      }),
    },
  },
  corePlugins: {
    appearance: false,
    container: false,
    float: false,
    clear: false,
    placeholderColor: false,
    placeholderOpacity: false,
    verticalAlign: false,
  },
  plugins: [
    // Fuse - Tailwind plugins
    require(path.resolve(__dirname, "src/@fuse/tailwind/plugins/utilities")),
    require(path.resolve(__dirname, "src/@fuse/tailwind/plugins/icon-size")),
    require(path.resolve(__dirname, "src/@fuse/tailwind/plugins/theming"))({
      themes,
    }),

    // Other third party and/or custom plugins
    require("@tailwindcss/typography")({ modifiers: ["sm", "lg"] }),
    require("@tailwindcss/aspect-ratio"),
    require("@tailwindcss/line-clamp"),
  ],
};

module.exports = config;
