import minimist from "minimist";

const ARGS = {
  string: [
    "lib-schema",
    "shard",
    "shards",
    "schema",
    "factor",
    "from",
    "to",
    "deactivate-sql",
    "max-replication-lag-sec",
    "parallelism",
    "dsn",
    "dsns",
    "decommission",
    "decomission",
    "activate",
    "activate-on-destination",
    "weight-sql",
    "migrate-cmd",
    "schema-name-fmt",
  ],
  boolean: ["verbose", "wait", "skip-config", "json"],
} as const;

export type Args = Record<"_", string[]> &
  Record<(typeof ARGS)["string"][number], string | undefined> &
  Record<(typeof ARGS)["boolean"][number], boolean | undefined>;

export function parseArgs(argsIn: string[]): Args {
  const args = minimist(argsIn, JSON.parse(JSON.stringify(ARGS)));
  return args as unknown as Args;
}
