import { A } from "ts-toolbelt";

import { UTILITIES_BY_CATEGORY } from "./utilities-by-category";

export type GenerateTailwindRuleSetOptions = {
  importPath?: string;
  target?: "file" | "console";
  exportName?: string;
};

export type CategoryRules<T extends string[]> =
  | boolean
  | ({ mode?: "whitelist" | "blacklist" } & { [K in T[number]]?: boolean });

export type TailwindRules = A.Compute<
  {
    mode?: "whitelist" | "blacklist";
  } & {
    -readonly [K in keyof typeof UTILITIES_BY_CATEGORY]?: CategoryRules<
      (typeof UTILITIES_BY_CATEGORY)[K][number][]
    >;
  }
>;

export type ResolvedRules = A.Compute<{
  -readonly [K in keyof typeof UTILITIES_BY_CATEGORY]: (typeof UTILITIES_BY_CATEGORY)[K][number][];
}>;
